загрузить на ftp asp.net - PullRequest
5 голосов
/ 08 мая 2009

Можно ли загрузить файл непосредственно в папку учетной записи FTP с ASP.NET?

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

Ответы [ 5 ]

4 голосов
/ 18 августа 2012
    /// <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:password@ftpserver/url-path
        // If you are a member of a domain, then "ftp://domain-name\username:password@url-path" 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;
    }
4 голосов
/ 08 мая 2009

Вы можете использовать класс 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);
}
4 голосов
/ 08 мая 2009

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

(я не пробую этот код, поэтому в нем могут быть некоторые ошибки ...)

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

1 голос
/ 08 мая 2009

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

0 голосов
/ 08 мая 2009

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.

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

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

ORIG

Элемент управления загрузкой файлов предоставит вам файл на вашем веб-сервере.

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

У вас есть общий путь UNC Path / Mapped Drive на другом сервере, который вы можете сохранить.

Элемент управления FileUpload имеет метод .SaveAs(), так что это просто

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