-1
我正在使用.NET 3.5,我需要通過FTP傳輸一些文件。 我不想使用文件,因爲我通過使用MemoryStream
和bytes arrays
來管理所有文件。C#FtpWebRequest創建損壞的文件
閱讀這些文章(article和article),我做了我的客戶。
public void Upload(byte[] fileBytes, string remoteFile)
{
try
{
string uri = string.Format("{0}:{1}/{2}", Hostname, Port, remoteFile);
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(uri);
ftp.Credentials = new NetworkCredential(Username.Normalize(), Password.Normalize());
ftp.UseBinary = true;
ftp.UsePassive = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream localFileStream = new MemoryStream(fileBytes))
{
using (Stream ftpStream = ftp.GetRequestStream())
{
int bufferSize = (int)Math.Min(localFileStream.Length, 2048);
byte[] buffer = new byte[bufferSize];
int bytesSent = -1;
while (bytesSent != 0)
{
bytesSent = localFileStream.Read(buffer, 0, bufferSize);
ftpStream.Write(buffer, 0, bufferSize);
}
}
}
}
catch (Exception ex)
{
LogHelper.WriteLog(logs, "Errore Upload", ex);
throw;
}
}
FTP客戶端正確連接,寫入和關閉,沒有任何錯誤。但是寫入的文件已損壞,如PDF無法打開,DOC/DOCX Word顯示關於文件損壞的消息並嘗試恢復它們。
如果我向文件寫入傳遞給Upload方法的相同字節,我會得到一個正確的文件。所以這個問題必須通過FTP傳輸。
byte[] fileBytes = memoryStream.ToArray();
File.WriteAllBytes(@"C:\test.pdf", fileBytes); // --> File OK!
ftpClient.Upload(fileBytes, remoteFile); // --> File CORRUPTED on FTP folder!
文件到達另一端的長度是否完全相同?它有一點機會早一點截斷? – BugFinder