use*_*249 4 c# stream getresponsestream filestream responsestream
这就是场景.
远程文件服务器上有一个文件(假设我有一个托管在DropBox上的文件)
我想在我的网络应用程序上下载该文件(c#asp.net 4.0)
我想隐藏原始文件的100%位置(我希望它看起来来自我的服务器).
我不想将此文件写入内存或我的服务器上的磁盘.
我曾假设我想使用流来进行流式复制.例
Stream inputStream = response.GetResponseStream();
inputStream.CopyTo(Response.OutputStream, 4096);
inputStream.Flush();
Response.Flush();
Response.End();
Run Code Online (Sandbox Code Playgroud)
然而,这会将整个流复制到内存中,然后再将其写入客户端浏览器.任何想法都会很棒.
我需要我的服务器基本上只是充当代理并屏蔽原始文件位置
谢谢你的帮助.
以下代码是我最终得到的(缓冲区大小将在生产中更改)这将从URL获取一个文件,并开始通过我的服务器将其通过块传输到客户端.让我想一想的部分是在每个块写完后刷新响应.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(digitalAsset.FullFilePath);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Response.ClearHeaders();
Response.ClearContent();
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + digitalAsset.FileName);
Stream inputStream = response.GetResponseStream();
byte[] buffer = new byte[512];
int read;
while ((read = inputStream.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, read);
Response.Flush();
}
Response.End();
}
Run Code Online (Sandbox Code Playgroud)
这可以通过我的服务器流式传输任何大小的文件,而无需等待我的服务器将其存储到内存或磁盘上.真正的优点是它只使用非常少的内存,因为只存储了缓冲的块.对于客户端,下载立即开始.(这对大多数人来说可能是显而易见的,但对于这个新手来说非常酷)所以我们同时从一个位置下载文件并使用服务器作为一种代理将其上传到另一个位置.
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |