【问题标题】:ftp file download working on localhost but not working on serverftp 文件下载在本地主机上工作但在服务器上不工作
【发布时间】:2012-06-20 09:36:20
【问题描述】:
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();

【问题讨论】:

  • 您需要具体说明什么不起作用?如果有的话会抛出什么异常?您似乎还缺少第四行 strFile 的变量类型。
  • 我的代码在本地系统上运行良好。但是在发布网站后的服务器上,我的代码无法正常工作。没有例外没有错误文件没有下载
  • 在从服务器请求时,您是否尝试过使用 Fiddler 跟踪详细信息?也许原始响应流中有线索。服务器事件日志也可能有一些线索。
  • 感谢 Maverik 现在我的代码可以工作了 :)
  • 不客气!如果您可以在答案中发布(并将您的答案标记为“答案”),您究竟出了什么问题以及您如何解决它,以便其他人将来可以受益,也许它会对其他人有所帮助。

标签: c# ftp download


【解决方案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();

【讨论】:

  • 如果它应该是对问题的编辑,您可以将其添加到您的问题中
  • 不,我认为这是答案。我注意到他现在已经在代码中添加了流刷新和内容类型。希望这可以帮助其他人。
【解决方案2】:

没有任何真正的细节可以继续,这可能必须在生产服务器上进行 Mime 类型设置。

这也可能是由于您和服务器之间可能存在透明代理过滤策略。

同样,您确实应该通过 Fiddler 进行细粒度跟踪,以查看服务器真正返回的内容以及请求是否成功完成。

假设这是一个 IIS 服务器,查看服务器事件日志还可以告诉您应用程序池是否崩溃并重新启动,这看起来好像没有任何问题但响应不正确。

【讨论】:

  • 但它只发生在 zip 文件中。我下载了 mp3 和其他文件,一切正常,但只有 zip 文件无法正常工作......
  • MIME 类型/文件类型过滤是最可能的罪魁祸首。可以直接通过浏览器下载同一个文件吗?
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多