Загрузка файлов на файловый сервер с использованием класса веб-клиента

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

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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 или сопоставления сетевого диска), ваш компьютер отправит ваши учетные данные по каналу, а файловый сервер получит авторизацию от DC.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top