Tôi đang tạo đơn giản kéo file và upload-tự động-to-ftp cửa sổ ứng dụngfile tải lên FTP đang bị hỏng một lần trong điểm đến
và tôi đang sử dụng để MSDN code tải tệp lên FTP.
Mã này là khá thẳng về phía trước:
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(String.Format("{0}{1}", FTP_PATH, filenameToUpload));
request.Method = WebRequestMethods.Ftp.UploadFile;
// Options
request.UseBinary = true;
request.UsePassive = false;
// FTP Credentials
request.Credentials = new NetworkCredential(FTP_USR, FTP_PWD);
// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(fileToUpload.FullName);
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();
writeOutput("Upload File Complete!");
writeOutput("Status: " + response.StatusDescription);
response.Close();
và nó có được tải lên FTP
Vấn đề là khi tôi nhìn thấy các tập tin trên trình duyệt, hoặc chỉ cần tải xuống và thử xem trên máy tính để bàn, tôi nhận được:
Tôi đã sử dụng request.UseBinary = false;
và request.UsePassive = false;
nhưng không có đường may để làm bất kỳ loại gì tốt.
Những gì tôi đã phát hiện ra là, các tập tin ban đầu có 122Kb chiều dài và trong FTP (và sau khi tải về), nó có 219Kb ...
Tôi đang làm gì sai?
Bằng cách này, phương pháp uploadFileToFTP()
đang chạy bên trong một BackgroundWorker
, nhưng tôi không thực sự điều đó làm cho bất kỳ sự khác biệt ...
Dữ liệu nhị phân và UTF-8 không trộn đều. – dtb
@dtb sử dụng 'Encoding.ASCII.GetBytes (sourceStream.ReadToEnd());' có cùng hành vi ... – balexandre
Sigh. ** Dữ liệu nhị phân ** và dữ liệu ** ký tự ** là hai thứ khác nhau. Có, bạn có thể mã hóa các ký tự thành byte, nhưng bạn không thể giải mã một cách mù quáng các byte không mã hóa các ký tự. – dtb