2009-05-08 4 views
5

Можно ли загрузить файл непосредственно в папку ftp account с помощью ASP.NET?Загрузить на ftp asp.net

E.g. Я нажимаю на просмотр, выбираю файл для загрузки и когда я нажимаю кнопку «Загрузить», он должен сохранять его непосредственно в папке на другом веб-сервере, расположенном где-то в другом месте, кроме сервера, который используется для загрузки.

ответ

0

EDIT

Во первых с @ знак там флаг строка как литерал. это избавляет вас от необходимости избегать символов, таких как обратная косая черта. например

string path = "Z:\\Path\\To\\File.txt"; 
string path = @"Z:\Path\To\File.txt"; 

Во-вторых, если у вас есть только FTP доступ к другому серверу, то вы можете взять, в FileUpload.FileBytes Достояние управления FileUpload. Это даст вам byte[] содержимого файла.

Из этого вы используете System.Net.FtpWebRequest & System.Net.FtpWebResponse, чтобы загрузить файл на учетную запись FTP.

Theres некоторые примеры кода здесь в VB.NET, но он должен быть достаточно легким для вас, чтобы выяснить

http://www.programmingforums.org/thread15954.html

ORIG управления загрузкой

Файл предоставит вам файл на вашем веб-сервере.

Это зависит от вас, чтобы скопировать/сохранить этот файл с веб-сервера на любой сервер , на котором размещен FTP.

У вас есть UNC-путь/подключенный к компьютеру общий доступ к вашему другому серверу, на который вы можете сохранить.

FileUpload управления имеет метод .SaveAs() так что это всего лишь простой вопрос

if (FileUpload1.HasFile) 
try 
{ 
    FileUpload1.SaveAs(@"Z:\Path\On\Other\Server\" + FileUpload1.FileName); 
} 
+0

спасибо за ответ .. Можете ли вы сказать мне, что знак @ используется для? и если я могу использовать IP-адрес, а не физический путь, так как веб-страница будет на другом сервере, чем сервер, я буду загружать файлы на ... например. fpt.mydomain.com/images, и в этом случае, если это можно сделать, мне, вероятно, нужно будет предоставить учетные данные пользователя правильно? если да, то как? –

+1

@ сайт создает строку вербабума, в основном устраняя необходимость escape \ as \\ –

+0

Или дословно, даже;) –

0

Вы не можете загрузить его на FTP непосредственно из вашего HTML формы. Однако вы можете загрузить его в свое приложение ASP.NET, а затем загрузить его на FTP с помощью FtpWebRequest.

4

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

string fileName = Path.Combine("<path on your server", FileUpload1.FileName); 
FileUpload1.SaveAs(fileName); 
using(System.Net.WebClient webClient = new System.Net.WebClient()) 
{ 
    webClient.UploadFile(
     New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
     localFile); 
} 

... или он может работать, делая это в один шаг:

using(System.Net.WebClient webClient = new System.Net.WebClient()) 
{ 
    webClient.UploadData(
     New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
     FileUpload1.FileBytes); 
} 

(я din't попробовать этот код, так что там могут быть некоторые ошибки в нем ...)

Обновление: Я заметил, что я был неправ, полагая, что методы UploadXXX WebClient были статическими ...

4

Вы можете использовать класс WebClient для хранения загруженного файла на FTP (без сохранения его как файла на сервере). Что-то вроде этого:

string name = Path.GetFileName(UploadControl.FileName); 
byte[] data = UploadControl.FileBytes; 

using (WebClient client = new WebClient()) { 
    client.UploadData("ftp://my.ftp.server.com/myfolder/" + name, data); 
} 
+0

Это, безусловно, не работает для моего веб-приложения ASP.NET. Интересно, почему это такое популярное решение, когда я даже не могу заставить его работать. Настолько разочаровывающе! >. < – Chiramisu

+0

@Chiramisu: Существует несколько возможных причин, по которым это не работает в вашем случае, но метод работает при правильных обстоятельствах. Это просто вопрос выяснения того, что удерживает его от работы. – Guffa

+0

Я удивлен, что вы ответили на такую ​​старую нить, но спасибо. Я пытаюсь успешно загрузить файл на FTP уже несколько дней. Не могли бы вы взглянуть на мой [вопрос] (http://stackoverflow.com/questions/7744447/desperate-ftp-fileupload-wrong-client-path) по этому вопросу? – Chiramisu

4
/// <summary> 
    /// Example call : if (FtpUpload(FileUploadControl1, "ftp.my.com/somePathDir", @"user", "pass!", "domain")) 
    /// </summary> 
    /// <param name="file"></param> 
    /// <param name="ftpServer"></param> 
    /// <param name="username"></param> 
    /// <param name="ftpPass"></param> 
    /// <returns></returns> 
    private bool FtpUpload(FileUpload file, string ftpServer, string username, string ftpPass, string domainName = "") 
    { 
     // ftp://domain\user:[email protected]/url-path 
     // If you are a member of a domain, then "ftp://domain-name\username:[email protected]" may fail because the backslash (\) is sent in as a literal character and Internet Explorer incorrectly looks for a file instead of parsing a Web address. Changing the backslash (\) in the domain-name\username to domainname%5Cusername works correctly. 

     try 
     { 
      string ftpAddres; 
      if (domainName != string.Empty) 
       ftpAddres = "ftp://" + domainName + @"%5C" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName; 
      else 
       ftpAddres = "ftp://" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName; 

      using (var webClient = new System.Net.WebClient()) 
      { 
       webClient.UploadData(new Uri(ftpAddres), file.FileBytes); 
      } 

     } 
     catch (Exception e) 
     { 
      throw new Exception(e.Message, e); 
     } 
     return true; 
    } 
Смежные вопросы