C# 在ASP.NET中将文件从web服务传递到客户端
我需要将通过web服务获得的文件传递给最终用户。现在,我分两步来做:C# 在ASP.NET中将文件从web服务传递到客户端,c#,asp.net,.net,vb.net,C#,Asp.net,.net,Vb.net,我需要将通过web服务获得的文件传递给最终用户。现在,我分两步来做: 从安全web服务获取文件: Dim客户端作为新的Net.WebClient client.Headers.Add(“Authorization”,String.Format(“Bearer{0}”,access_token)) 作为字节()的Dim数据=client.DownloadData(uri) 通过http响应将文件提供给用户 对于最终用户来说,这需要很长时间,因为用户必须等待服务器从服务下载文件,然后等待客户端从服务
是否可以将文件直接从web服务流式传输给用户?如果是这样,最好的方法是什么?我认为实现这一点的最好方法是逐步下载文件并将其缓冲到响应中,以便逐步下载到客户端。这样,最终用户就不必等待服务器完全下载文件并将其发回。当它从另一个位置下载文件内容时,它只会流式传输文件内容。作为奖励,您不必将整个文件保存在内存或磁盘中 下面是实现这一点的代码示例:
protected void downloadButton_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "MyFile.exe"));
Response.Buffer = true;
Response.ContentType = "application/octet-stream";
using (var downloadStream = new WebClient().OpenRead("http://otherlocation.com/MyFile.exe")))
{
var uploadStream = Response.OutputStream;
var buffer = new byte[131072];
int chunk;
while ((chunk = downloadStream.Read(buffer, 0, buffer.Length)) > 0)
{
uploadStream.Write(buffer, 0, chunk);
Response.Flush();
}
}
Response.Flush();
Response.End();
}
无论您如何剪切它,您仍然需要自己进行流式处理,因为您最终是文件和最终用户之间的代理。您是否无法在第一次流式传输文件时将其存储在自己的服务器上,然后后续请求可以下载您保存的版本?我可以存储该文件,但每个文件仅可能由单个用户下载一次,因此该选项中的实用性很小。我只是希望加快这个过程。太好了。这太完美了。