2012-06-20 72 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

相关问题