只是为了发布正确答案的开始。我想我会使用 http 处理程序 (.ashx) 文件来为这些文件编写一些自定义处理 - 本教程显示了一个示例。
您的链接将类似于
<a href="MyMp3Handler.ashx?fileName=MyFile">Click here to download</a>
处理程序将完成流式传输工作。
处理程序的外观示例(基于此SO question)
public void ProcessRequest (HttpContext context) {
var filePath = Server.MapPath(context.Request.QueryString["fileName"].ToString()) + ".mp3";
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();
}
处理程序还需要在 web.config 中注册。
但请注意 - 这不是我的想法,所以代码需要调整才能工作。只是想我会弹出我将如何开始
附加说明
一位同事刚刚指出,即使将内容类型设置为application/octet-stream它仍然取决于浏览器实现如何呈现它,因此它仍然可能不会流式传输。也就是说,我做了类似的事情,但在 PHP 中,我在 Firefox、IE 和 Chrome 中得到了 mp3 文件,所以这个原理确实有效。我在 asp.net 中提供了示例,因为这就是您的问题被标记的内容。