簡體   English   中英

使用C#上傳到服務器后,Zip文件已損壞

[英]Zip file is getting corrupted after uploaded to server using C#

我正在嘗試使用C# (Framework 4) 將zip文件上傳到服務器,以下是我的代碼。

string ftpUrl = ConfigurationManager.AppSettings["ftpAddress"];
string ftpUsername = ConfigurationManager.AppSettings["ftpUsername"];
string ftpPassword = ConfigurationManager.AppSettings["ftpPassword"];  
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl + "Transactions.zip");  
request.Proxy = new WebProxy(); //-----The requested FTP command is not supported when using HTTP proxy.
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
StreamReader sourceStream = new StreamReader(fileToBeUploaded);
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();  

zip文件上傳成功,但是當我嘗試從服務器(手動)打開zip文件時,它顯示出Unexpected end of archive錯誤。
對於文件壓縮,我使用的是Ionic.zip dll 在傳輸zip文件之前,我能夠成功提取。

任何幫助贊賞。 謝謝。

這就是問題:

StreamReader sourceStream = new StreamReader(fileToBeUploaded);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

StreamReader (和任何TextReader )用於文本數據。 zip文件不是文本數據。

只需使用:

byte[] fileContents = File.ReadAllBytes(fileToBeUploaded);

這樣你就不會將二進制數據視為文本,因此它不應該被破壞。

或者,不要單獨將它們全部加載到內存中 - 只需流式傳輸數據:

using (var requestStream = request.GetRequestStream())
{
    using (var input = File.OpenRead(fileToBeUploaded))
    {
        input.CopyTo(requestStream);
    }
}

另請注意,您應該對所有這些流使用using語句,而不是僅調用Close - 這樣即使拋出異常,資源也會被處理掉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM