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();
4

2 に答える 2

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();
于 2012-06-21T09:35:13.970 に答える
0

実際の詳細がなくても、本番サーバーで Mime タイプをセットアップする必要がある場合があります。

これは、ユーザーとサーバーの間に存在する透過的なプロキシ フィルタリング ポリシーが原因である可能性もあります。

繰り返しになりますが、Fiddler を介してきめ細かいトレースを実行し、実際にサーバーから何が返されているか、および要求が正常に終了しているかどうかを確認する必要があります。

これが IIS サーバーであると仮定すると、サーバー イベント ログを調べると、アプリケーション プールがクラッシュして再起動されているかどうかもわかります。これは、何も問題がないように見えますが、応答は正しくありません。

于 2012-06-20T14:42:51.743 に答える