Загрузка файлов на файловый сервер с использованием класса веб-клиента - PullRequest
11 голосов
/ 05 ноября 2008

В настоящее время у меня есть приложение, которое получает загруженный файл из моего веб-приложения. Теперь мне нужно перенести этот файл на файловый сервер, который расположен в той же сети (однако это не всегда так).

Я пытался использовать класс webclient в 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. На данный момент я получаю сообщение об ошибке «Ошибка входа в систему», неверное имя пользователя или пароль, но я могу открыть проводник и успешно ввести этот путь. Я также могу войти через удаленный рабочий стол, поэтому я знаю, что учетная запись пользователя работает.

Есть идеи по этой ошибке? Можно ли передать файл напрямую, как это? С классом веб-клиента или, может быть, с другим классом?

Ответы [ 3 ]

16 голосов
/ 05 ноября 2008

Просто используйте

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

Файловый ресурс Windows, предоставляемый по пути UNC, рассматривается как часть файловой системы и не имеет ничего общего с сетью.

Используются учетные данные рабочего процесса ASP.NET или любое другое олицетворение, которое вы включили. Если вы можете настроить их, чтобы сделать это правильно, это можно сделать.

Вы можете столкнуться с проблемами, потому что вы используете IP-адрес вместо имени сервера (настройки доверия Windows предотвращают выход из домена - с помощью IP вы скрываете любые сведения о домене). Если это вообще возможно, используйте имя сервера!

Если это не тот же домен Windows, и вы пытаетесь использовать другую учетную запись домена, вам нужно будет указать имя пользователя как «[domain_or_machine] \ [username]»

Если вам нужно указать явные учетные данные, вам нужно изучить кодирование решения для олицетворения .

4 голосов
/ 30 мая 2010
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);
        }
    }
}
}
0 голосов
/ 05 ноября 2008

когда вы вручную открываете IP-адрес (с помощью команды RUN или сопоставления сетевого диска), ваш компьютер отправит ваши учетные данные по каналу, а файловый сервер получит авторизацию от DC.

Когда ASP.Net пытается, он попытается использовать рабочего пользователя IIS (если не включена олицетворение, которое перечислит несколько других проблем). Традиционно рабочий пользователь IIS не имеет прав для работы на разных серверах (или даже в других папках на веб-сервере).

...