我正在开发一个允许用户下载文件的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();
但是,现在有些文件存储在单独的服务器上。我可以使用
验证文件是否存在WebRequest request = WebRequest.Create(absolute-url);
WebResponse response = request.GetResponse();
但是我如何促进传输,因为TransmitFile需要虚拟路径而不是URL?
我需要用户能够选择保存文件的位置和正常的网络下载一样
最好的方法是什么?
答案 0 :(得分:5)
如果您可以通过网络请求获取响应流,则应该能够根据此代码段将流复制到输出流:
while ((read = stream.Read(buffer, offset, chunkSize)) > 0)
{
Response.OutputStream.Write(buffer, 0, read);
Response.Flush();
}
答案 1 :(得分:2)
您无法将TransferFile用于远程文件。 但你可以使用WriteFile。
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以将远程服务器的驱动器映射为共享,然后使用TransmitFile。如果服务器没有视线,您可以在远程服务器上启用WebDAV,然后将它们映射到物理路径并使用TransmitFile。