C# 通过HTTP传输文件的Response.TransmitFile的替代方案
我正在开发一个允许用户下载文件的ASP.NET网站 以前,文件存储在与网站相同的服务器上,因此我们可以:C# 通过HTTP传输文件的Response.TransmitFile的替代方案,c#,asp.net,httpwebrequest,C#,Asp.net,Httpwebrequest,我正在开发一个允许用户下载文件的ASP.NET网站 以前,文件存储在与网站相同的服务器上,因此我们可以: Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); Response.AddHeader("Content-Length", response.ContentLength.ToString()); Response.ContentTy
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();
但是,现在有些文件存储在单独的服务器上。我可以使用验证文件是否存在
WebRequest request = WebRequest.Create(absolute-url);
WebResponse response = request.GetResponse();
但是,由于TransmitFile需要一个虚拟路径而不是url,如何促进传输呢
我需要用户能够选择在哪里保存文件作为一个正常的网络下载
最好的方法是什么
您可以将远程服务器的驱动器映射为共享,然后使用TransmitFile。如果服务器没有视线,您可以在远程服务器上启用WebDAV,然后将它们映射到物理路径并使用TransmitFile。您不能将TransferFile用于远程文件。
但是您可以使用WriteFile进行此操作。如果您可以通过web请求获取响应流,则应该能够按照以下代码段将流复制到输出流:
while ((read = stream.Read(buffer, offset, chunkSize)) > 0)
{
Response.OutputStream.Write(buffer, 0, read);
Response.Flush();
}
请注意,API为Reponse.BinaryWriteI无法重定向,因为需要提示用户在每个实例中保存文件-即使下载的是通常可以在web浏览器中打开的图像。你能给我一个如何代理请求的例子吗?我不太明白你的意思!感谢您的建议如果唯一的要求是提示用户保存文件,那么只需通过IIS MMC将自定义HTTP头添加到文件夹中,并将“内容处置”设置为“附件”,就像在C#中所做的那样。然后一个简单的重定向到文件就可以了。我希望我不是天真的。你可以在另一台服务器上提供一个超链接,其中包含文件的URL(除非你想自己跟踪事情,或者你想在文件传输到客户端之前进行预处理)。我在另一个服务器传输文件上使用的路径不起作用,但这很好