تحميل الملفات إلى خادم الملفات باستخدام فئة webclient

StackOverflow https://stackoverflow.com/questions/263518

سؤال

لدي حاليًا تطبيق يتلقى ملفًا تم تحميله من تطبيق الويب الخاص بي.أحتاج الآن إلى نقل هذا الملف إلى خادم ملفات موجود على نفس الشبكة (ولكن قد لا يكون هذا هو الحال دائمًا).

كنت أحاول استخدام فئة عميل الويب في C# .NET.

    string filePath = "C:\\test\\564.flv";
    try
    {
        WebClient client = new WebClient();

        NetworkCredential nc = new NetworkCredential(uName, password);

        Uri addy = new Uri("\\\\192.168.1.28\\Files\\test.flv");
        client.Credentials = nc;
        byte[] arrReturn = client.UploadFile(addy, filePath);
        Console.WriteLine(arrReturn.ToString());
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

الجهاز الموجود على 192.168.1.28 هو خادم ملفات وله مشاركة c:\Files.اعتبارًا من الآن، أتلقى خطأً مفاده أن اسم المستخدم أو كلمة المرور غير صالحة لتسجيل الدخول، ولكن يمكنني فتح المستكشف وكتابة تسجيل الدخول إلى هذا المسار بنجاح.يمكنني أيضًا تسجيل الدخول باستخدام سطح المكتب البعيد، حتى أعرف أن حساب المستخدم يعمل.

أي أفكار حول هذا الخطأ؟هل من الممكن نقل ملف مباشرة من هذا القبيل؟مع فئة عميل الويب أو ربما فئة أخرى؟

هل كانت مفيدة؟

المحلول

مجرد استخدام

File.Copy(filepath, "\\\\192.168.1.28\\Files");

يتم التعامل مع مشاركة ملفات Windows التي يتم عرضها عبر مسار UNC كجزء من نظام الملفات، ولا علاقة لها بالويب.

ستكون بيانات الاعتماد المستخدمة هي تلك الخاصة بالعملية المنفذة لـ ASP.NET، أو أي انتحال للهوية قمت بتمكينه.إذا كان بإمكانك تعديلها للحصول عليها بشكل صحيح، فيمكن القيام بذلك.

قد تواجه مشكلات لأنك تستخدم عنوان IP بدلاً من اسم الخادم (إعدادات الثقة في Windows تمنع مغادرة المجال - باستخدام IP فإنك تخفي أي تفاصيل للمجال). إذا كان ذلك ممكنا، استخدم اسم الخادم!

إذا لم يكن هذا على نفس مجال windows، وكنت تحاول استخدام حساب مجال مختلف، فستحتاج إلى تحديد اسم المستخدم كـ "[domain_or_machine]\[اسم المستخدم]"

إذا كنت بحاجة إلى تحديد بيانات اعتماد صريحة، فسوف تحتاج إلى النظر فيها ترميز حل انتحال الشخصية.

نصائح أخرى

namespace FileUpload
{
public partial class Form1 : Form
{
    string fileName = "";
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        string path = "";
        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Title = "Attach customer proposal document";
        fDialog.Filter = "Doc Files|*.doc|Docx File|*.docx|PDF doc|*.pdf";
        fDialog.InitialDirectory = @"C:\";
        if (fDialog.ShowDialog() == DialogResult.OK)
        {
            fileName = System.IO.Path.GetFileName(fDialog.FileName);
            path = Path.GetDirectoryName(fDialog.FileName);
            textBox1.Text = path + "\\" + fileName;

        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        try
        {
            WebClient client = new WebClient();

            NetworkCredential nc = new NetworkCredential("erandika1986", "123");

            Uri addy = new Uri(@"\\192.168.2.4\UploadDocs\"+fileName);

            client.Credentials = nc;
            byte[] arrReturn = client.UploadFile(addy, textBox1.Text);
            MessageBox.Show(arrReturn.ToString());

        }
        catch (Exception ex1)
        {
            MessageBox.Show(ex1.Message);
        }
    }
}
}

وعند يدويا فتح عنوان IP (عن طريق الأمر RUN أو تعيين محرك أقراص الشبكة)، وجهاز الكمبيوتر الخاص بك بإرسال بيانات الاعتماد الخاصة بك على الأنابيب وسوف ملقم ملفات يحصل على إذن من العاصمة.

وعندما يحاول ASP.Net، ثم هو ذاهب إلى محاولة استخدام المستخدم عامل IIS (ما لم يتم تشغيل الانتحال التي سيتم سرد عدد قليل من القضايا الأخرى). تقليديا، المستخدم عامل IIS ليس لديها ترخيص للعمل عبر ملقمات (أو حتى في مجلدات أخرى على خادم الويب).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top