我正在使用WCF上传和下载文件。我正在使用以下内容进行下载。
try
{
MyService.IWITSService clientDownload = new WITSServiceClient();
MyService.DownloadRequest requestData = new DownloadRequest();
MyService.RemoteFileInfo fileInfo = new RemoteFileInfo();
requestData.ItemID = Convert.ToInt32(Request.QueryString["id"]);
fileInfo = clientDownload.DownloadFile(requestData);
Response.BufferOutput = false; // to prevent buffering
byte[] buffer = new byte[6500000];
int bytesRead = 0;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ContentType = fileInfo.FileExt;
HttpContext.Current.Response.AddHeader("Content-Disposition","attachment; filename=" + fileInfo.FileName);
bytesRead = fileInfo.FileByteStream.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
// Verify that the client is connected.
if (Response.IsClientConnected)
{
Response.OutputStream.Write(buffer, 0, bytesRead);
// Flush the data to the HTML output.
Response.Flush();
buffer = new byte[6500000];
bytesRead = fileInfo.FileByteStream.Read(buffer, 0, buffer.Length);
}
else
{
bytesRead = -1;
}
}
}
catch (Exception ex)
{
// Trap the error, if any.
System.Web.HttpContext.Current.Response.Write("Error : " + ex.Message);
}
finally
{
Response.Flush();
Response.Close();
Response.End();
System.Web.HttpContext.Current.Response.Close();
}
文件已下载但文件数据未显示。文件大小与实际大小相同 尺寸。任何人都可以帮助我,我必须改变.. 提前谢谢..
答案 0 :(得分:0)
您不想同时拨打Response.Close()
或System.Web.HttpContext.Current.Response.Close()
。它会中断与客户端的连接。
HttpResponse.Close Method的文档说:
此方法突然终止与客户端的连接 方式,不适用于正常的HTTP请求处理。该 方法向客户端发送重置包,这可能导致响应 在服务器,客户端或其中的某个位置缓冲的数据 之间的关系。
您可以使用此方法来响应恶意HTTP的攻击 客户。但是,通常您应该调用CompleteRequest,如果 你想跳到EndRequest事件并发送响应 客户。
因此请将finally
代码缩减为:
finally
{
Response.Flush();
Response.End();
}