Загрузить файл на ftp
Я хочу загрузить файл с одного сервера на другой ftp-сервер, а следующий – мой код для загрузки файла, но он выдает ошибку как: {«Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, файл не найден, нет доступ). “}
Этот мой код:
string CompleteDPath = "ftp URL"; string UName = "UserName"; string PWD = "Password"; WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName); reqObj.Method = WebRequestMethods.Ftp.UploadFile; reqObj.Credentials = new NetworkCredential(UName, PWD); FileStream streamObj = System.IO.File.OpenRead(Server.MapPath(FileName)); byte[] buffer = new byte[streamObj.Length + 1]; streamObj.Read(buffer, 0, buffer.Length); streamObj.Close(); streamObj = null; reqObj.GetRequestStream().Write(buffer, 0, buffer.Length); reqObj = null;
Не могли бы вы рассказать мне, где я ошибаюсь?
- 'foo' не был объявлен в этой области c ++
- Реализация алгоритма Хой Шамоса с помощью C #
- Являются ли члены структуры C ++ инициализированы по умолчанию 0?
- DbSet.Attach (entity) vs DbContext.Entry (entity) .State = EntityState.Modified
- Каков наилучший способ определить переменную сеанса, является пустой или пустой в C #?
- Вызывается деструктор, когда объект выходит из области видимости?
- Что вызывает ошибку Broken Pipe?
- друг И встроенный метод, в чем смысл?
- Добавить параметр в событие Click Button
- Что может привести к ошибкам сегментации в C ++?
- Права администратора для одного метода
- iOS: используйте логическое значение в NSUserDefaults
- Сравните std :: wstring и std :: string
Убедитесь, что ваш ftp-путь установлен, как показано ниже.
string CompleteDPath = "ftp://www.example.com/wwwroot/videos/"; string FileName = "sample.mp4"; WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName);
Следующий скрипт отлично работает со мной для загрузки файлов и видео в другой servier через ftp.
FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(ftpurl + "" + username + "_" + filename); ftpClient.Credentials = new System.Net.NetworkCredential(ftpusername, ftppassword); ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile; ftpClient.UseBinary = true; ftpClient.KeepAlive = true; System.IO.FileInfo fi = new System.IO.FileInfo(fileurl); ftpClient.ContentLength = fi.Length; byte[] buffer = new byte[4097]; int bytes = 0; int total_bytes = (int)fi.Length; System.IO.FileStream fs = fi.OpenRead(); System.IO.Stream rs = ftpClient.GetRequestStream(); while (total_bytes > 0) { bytes = fs.Read(buffer, 0, buffer.Length); rs.Write(buffer, 0, bytes); total_bytes = total_bytes - bytes; } //fs.Flush(); fs.Close(); rs.Close(); FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse(); value = uploadResponse.StatusDescription; uploadResponse.Close();
Вот пример кода для загрузки файла на FTP-сервере
string filename = Server.MapPath("file1.txt"); string ftpServerIP = "ftp.demo.com/"; string ftpUserName = "dummy"; string ftpPassword = "dummy"; FileInfo objFile = new FileInfo(filename); FtpWebRequest objFTPRequest; // Create FtpWebRequest object objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + objFile.Name)); // Set Credintials objFTPRequest.Credentials = new NetworkCredential(ftpUserName, ftpPassword); // By default KeepAlive is true, where the control connection is // not closed after a command is executed. objFTPRequest.KeepAlive = false; // Set the data transfer type. objFTPRequest.UseBinary = true; // Set content length objFTPRequest.ContentLength = objFile.Length; // Set request method objFTPRequest.Method = WebRequestMethods.Ftp.UploadFile; // Set buffer size int intBufferLength = 16 * 1024; byte[] objBuffer = new byte[intBufferLength]; // Opens a file to read FileStream objFileStream = objFile.OpenRead(); try { // Get Stream of the file Stream objStream = objFTPRequest.GetRequestStream(); int len = 0; while ((len = objFileStream.Read(objBuffer, 0, intBufferLength)) != 0) { // Write file Content objStream.Write(objBuffer, 0, len); } objStream.Close(); objFileStream.Close(); } catch (Exception ex) { throw ex; }
Вы также можете использовать тип WebClient
более высокого уровня для работы с WebClient
FTP с более чистым кодом:
using (WebClient client = new WebClient()) { client.Credentials = new NetworkCredential(ftpUsername, ftpPassword); client.UploadFile("ftp://ftpserver.com/target.zip", "STOR", localFilePath); }
В случае, если у вас все еще есть проблемы, вот что привело меня в прошлое. Я получал ту же ошибку, несмотря на то, что я мог отлично видеть файл в каталоге, который я пытался загрузить, то есть: я перезаписывал файл.
Мой ftp url выглядел так:
// ftp://www.mywebsite.com/testingdir/myData.xml FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.mywebsite.com/testingdir/myData.xml"
Итак, мои учетные данные используют мое имя пользователя тестера и PW;
request.Credentials = new NetworkCredential ("tester", "testerpw");
Ну, мой счетчик ftp-тестера установлен на « ftp://www.mywebsite.com/testingdir », но когда я на самом деле ftp [скажу из проводника], я просто помещаю « ftp://www.mywebsite.com » и войдите в систему с моими учетными данными и автоматически отправьте «testdir».
Итак, чтобы сделать эту работу на C #, я закончил с использованием url – ftp://www.mywebsite.com/myData.xml. При условии, что мои учетные данные проверяют учетную запись, и все работает нормально.
public void UploadImageToftp() { string server = "ftp://111.61.28.128/Example/"; //server path string name = @"E:\Apache\htdocs\visa\image.png"; //image path string Imagename= Path.GetFileName(name); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(string.Format("{0}{1}", server, Imagename))); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential("username", "password"); Stream ftpStream = request.GetRequestStream(); FileStream fs = File.OpenRead(name); byte[] buffer = new byte[1024]; int byteRead = 0; do { byteRead = fs.Read(buffer, 0, 1024); ftpStream.Write(buffer, 0, byteRead); } while (byteRead != 0); fs.Close(); ftpStream.Close(); MessageBox.Show("Image Upload successfully!!"); }