Передача файлов ASP.NET с локального компьютера на другой - PullRequest
0 голосов
/ 17 марта 2010

Я в основном хочу передать файл с клиента на сервер хранения файлов без фактической регистрации на сервере, чтобы клиент не мог получить доступ к месту хранения на сервере напрямую. Я могу сделать это, только если я вручную войду на сервер хранения через Windows Login. Я не хочу этого делать. Это веб-приложение.

Используя ссылку ниже, я написал код для своего приложения. Я не могу понять это правильно, пожалуйста, обратитесь по ссылке и помогите мне с этим ...

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


Вот мой код: -

protected void Button1_Click(object sender, EventArgs e) 
{ 

    filePath = FileUpload1.FileName;     
    try 
    { 
        WebClient client = new WebClient(); 

        NetworkCredential nc = new NetworkCredential(uName, password); 

        Uri addy = new Uri("\\\\192.168.1.3\\upload\\"); 
        client.Credentials = nc; 
        byte[] arrReturn = client.UploadFile(addy, filePath); 

        Console.WriteLine(arrReturn.ToString()); 
    } 
    catch (Exception ex) 
    { 
        Console.WriteLine(ex.Message); 
    } 

} 

Следующая строка не выполняется ...

byte[] arrReturn = client.UploadFile(addy, filePath); 

Это ошибка, которую я получаю:

Исключение произошло во время Запрос WebClient

Ответы [ 2 ]

1 голос
/ 23 июня 2011

У меня была такая же проблема несколько дней назад, я решил ее, создав пользователя на веб-сервере и сервере хранения с одинаковыми именем пользователя и паролем, а затем выдал себя за пользователя в файле web.config.

NB. Пользователь должен иметь разрешения RW в каталоге, в котором вы хотите хранить файлы.

1 голос
/ 17 марта 2010

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

Но: если у вас есть необходимые разрешения, не могли бы вы просто сохранить файл, полученный в FileUpload, по этому UNC-пути с помощью стандартных вызовов System.IO ?? Что-то вроде:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
        string completeFileName = 
           Path.Combine(@"\\192.168.1.3\upload", FileUpload1.FileName); 

        BinaryReader br = new BinaryReader(FileUpload1.PostedFile.InputStream);

        FileStream fstm = new FileStream(completeFileName, FileMode.Create, FileAccess.ReadWrite);
        BinaryWriter bw = new BinaryWriter(fstm);

        byte[] buffer = br.ReadBytes(FileUpload1.PostedFile.ContentLength);
        br.Close();

        bw.Write(buffer);
        bw.Flush();
        bw.Close();
    } 
    catch (Exception ex) 
    { 
        Console.WriteLine(ex.Message); 
    } 
} 

Если вы ожидаете, что будут загружены очень большие файлы, вы можете передать данные из BinaryReader в BinaryWriter порциями - вместо того, чтобы выделять только один буфер - но на самом деле это просто деталь реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...