2008-11-04 4 views
9

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

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

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

+0

является учетной записью учетной записи домена или учетной записью машины? – TheSoftwareJedi 2008-11-04 21:40:37

+0

Учетная запись пользователя на компьютере. Проблема в том, что мы переходим к новой архитектуре, и у нас есть 2 файловых сервера с кластеризацией и балансировка нагрузки с помощью виртуального ip. Поэтому мне нужно отправить файл в VIP. – JustLogic 2008-11-04 21:53:31

ответ

16

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

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

окна Обменник экспонируется через путь UNC рассматривается как часть файловой системы, и не имеет ничего общего с полотном.

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

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

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

Если вам нужно чтобы указать явные учетные данные, вам нужно посмотреть на coding an impersonation solution.

0

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

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

3
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); 
     } 
    } 
} 
}