Передача файла с использованием ftp с одного сервера на другой в другом месте - PullRequest
2 голосов
/ 25 декабря 2010

У меня есть требование переноса файла документа (.txt, .xls, .doc, .bmp, .jpg и т. Д.) С одного сервера на другой.Оба сервера находятся в разных местах.Мое основное приложение работает на втором сервере.И мне нужно развернуть эту функцию на первом сервере, откуда файлы в любой фиксированной папке (скажем, D: \ documents) будут периодически передаваться на второй сервер при любом событии таймера.

Я использую код, подобныйследующим образом

WebClient wc = new WebClient();
wc.UploadFile("ftp://1.23.153.248//d://ftp.bmp", 
    @"C:\Documents and Settings\varun\Desktop\ftp.bmp");

Я получаю ошибку как

unable to connect to remote server  

или

sometime underlying connection was closed 

Не могли бы вы сказать мне, что не так.

Ответы [ 2 ]

1 голос
/ 25 декабря 2010

Кажется, что URI вашего FTP-адреса отключен: вам не нужно удваивать все прямые слэши, и я не думаю, что буквы дисков поддерживаются.

Если вы делаете:

WebClient wc = new WebClient();
wc.UploadFile("ftp://1.23.153.248/ftp.bmp",
    @"C:\Documents and Settings\varun\Desktop\ftp.bmp");

Файл будет отправлен в каталог, заданный как местоположение FTP для анонимного пользователя. Если вы настроите службу FTP на 1.23.153.248 так, чтобы местоположение было D:\, все должно работать как запланировано.

1 голос
/ 25 декабря 2010

Ваш ftp публичен? если нет, вы должны определить учетные данные, как это

wc.Credentials = new NetworkCredential ("username","password");

перед отправкой файла и попробуйте удалить d: из пути ftp. FTP-клиенты не должны знать, где на сервере должны быть сохранены файлы ... коротко попробуйте это

WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential ("username","password");
wc.UploadFile("ftp://1.23.153.248/ftp.bmp", @"C:\Documents and Settings\varun\Desktop\ftp.bmp");

Существуют также классы, созданные специально для запроса ftp в .net, вот пример из MSDN

 // Get the object used to communicate with the server.
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
            request.Method = WebRequestMethods.Ftp.UploadFile;

            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");

            // Copy the contents of the file to the request stream.
            StreamReader sourceStream = new StreamReader("testfile.txt");
            byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
            sourceStream.Close();
            request.ContentLength = fileContents.Length;

            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

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