Response.TransmitFile的替代方案,用于通过HTTP传输文件

man*_*yst 3 c# asp.net httpwebrequest

我正在开发一个允许用户下载文件的ASP.NET网站.

以前文件存储在与网站相同的服务器上,因此我们可以这样做:

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(path);
Response.End();
Run Code Online (Sandbox Code Playgroud)

但是,现在一些文件存储在单独的服务器上.我可以验证文件是否存在使用

WebRequest request = WebRequest.Create(absolute-url);
WebResponse response = request.GetResponse();
Run Code Online (Sandbox Code Playgroud)

但是,我如何促进传输,因为TransmitFile需要虚拟路径而不是URL?

我需要用户能够选择保存文件的位置,就像正常的网络下载一样

最好的方法是什么?

Try*_*anC 5

如果您可以通过Web请求获取响应流,则应该能够根据以下代码段将流复制到输出流:

while ((read = stream.Read(buffer, offset, chunkSize)) > 0)    
{

    Response.OutputStream.Write(buffer, 0, read);
    Response.Flush();
}
Run Code Online (Sandbox Code Playgroud)