2012-06-20 69 views
1
string HostName = System.Configuration.ConfigurationSettings.AppSettings["HostName"]; 
string strUser = System.Configuration.ConfigurationSettings.AppSettings["BasicAuthenticationUser"]; 
string strPWD = System.Configuration.ConfigurationSettings.AppSettings["BasicAuthenticationPWD"]; 

strFile = "9788191073072.zip"; 

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(HostName + strFile); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(strUser, strPWD); 
request.UsePassive = true; 
request.UseBinary = true; 
request.KeepAlive = false; 

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 

Response.AddHeader("content-disposition", "attachment;filename=" + strFile); 

byte[] buffer = new byte[2 * 1024]; 
int read; 

while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) { Response.OutputStream.Write(buffer, 0, read); } 

responseStream.Close(); 
response.Close(); 
+0

你需要指定什麼是不工作?如果有什麼異常被拋出?你也似乎在第四行缺少strFile的變量類型。 – Maverik

+0

我的代碼在本地系統上工作正常。但在發佈的網站上嚴重後,我的代碼無法正常工作。沒有例外沒有錯誤文件沒有下載 – Jitender

+0

你有沒有嘗試過從服務器請求Fiddler的跟蹤細節?也許在原始響應流中有線索。服務器事件日誌也可能有一些線索。 – Maverik

回答

0

沒有任何真正的細節可以繼續,這可能必須在生產服務器上設置MIME類型。

這也可能是由於您和服務器之間可能存在的透明代理篩選策略。

再一次,你應該通過Fiddler做一個細粒度的跟蹤,看看服務器真正返回什麼,以及請求是否成功完成。

假設這是一個IIS服務器,服務器事件日誌中的外觀還可以告訴您應用程序池是否崩潰並重新啓動,看起來好像沒有錯誤,但響應不正確。

+0

但它只發生在zip文件。我下載的MP3和其他文件的每件事情都很好,但只有在zip文件不能正常工作時... – Jitender

+0

MIME類型/文件類型過濾是最可能的罪魁禍首。你能直接通過瀏覽器下載相同的文件嗎? – Maverik

+0

問題解決了,謝謝你的幫助... – Jitender

1
string HostName = System.Configuration.ConfigurationSettings.AppSettings["HostName"]; 
string strUser = System.Configuration.ConfigurationSettings.AppSettings["BasicAuthenticationUser"]; 
string strPWD = System.Configuration.ConfigurationSettings.AppSettings["BasicAuthenticationPWD"]; 

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(HostName + strFile); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(strUser, strPWD); 
request.UsePassive = true; 
request.UseBinary = true; 
request.KeepAlive = false; 

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 

Response.ContentType = "application/octet-stream"; 
Response.AddHeader("content-disposition", "attachment;filename=" + _AudiobookName + ".zip"); 
int read; 
byte[] buffer = new byte[2 * 1024]; 
while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) 
{ 
    Response.OutputStream.Write(buffer, 0, read); 
    Response.Flush(); 
} 
responseStream.Close(); 
response.Close(); 
Response.Flush(); 
Response.End(); 
+0

這是我的完整功能代碼 – Jitender

+0

你可以添加這個到你的問題,而不是,如果它應該是一個編輯問題 –

+0

不,我認爲這是答案。我注意到他現在已經在代碼中添加了流刷新和內容類型。希望這可以幫助別人。 – Maverik

相關問題