【发布时间】:2011-04-08 14:41:03
【问题描述】:
我需要流式传输一个文件,这将导致在浏览器中另存为提示。 问题是,文件所在的目录是虚拟映射的,所以我无法使用 Server.MapPath 来确定它的实际位置。该目录与网站不在同一位置(甚至是 Live Box 上的物理服务器)。
我想要类似以下的内容,但这将允许我传递 Web URL,而不是服务器文件路径。
我可能不得不最终从配置基本路径构建我的文件路径,然后附加到路径的其余部分,但希望我可以这样做。
var filePath = Server.MapPath(DOCUMENT_PATH);
if (!File.Exists(filePath))
return;
var fileInfo = new System.IO.FileInfo(filePath);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", filePath));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.WriteFile(filePath);
Response.End();
【问题讨论】:
-
您能否详细说明“虚拟映射”的含义?可以通过 URL 访问的虚拟 IIS 文件夹?
-
它使用VPP路径,这是EpiServer CMS使用的概念我们设置虚拟路径名称(即“/documents/”),然后指定它也应该映射的物理路径(即“ //服务器名称/文档")。然后系统在运行时创建对目录的引用。您可以毫无问题地通过 Web URL 浏览文件
-
文件名确实可以通过 URL 访问。我需要使用此 URL 来流式传输文件,而不是服务器路径,因为我无法从 URL 中确定它(使用 MapPath)
-
如果您知道 URL 并且文件扩展名会在浏览器中打开另存为提示(或者这是您的问题之一?),也许您可以将请求重定向到您要下载的文件?否则,user97970 的建议似乎是要走的路。
标签: c# asp.net file-io streaming