悬赏分:50 浏览:398 次
|
试过HttpResponse.TransmitFile()没? 把文件所在地址映射成一个站点下的虚拟目录试试. 或者另建一个二级域名的网站如 files.yourdomain.com , 指向文件所在目录. 这样就可以实现分开布署了. 验证也可以做到. 文件下载不要直接指向文件本身 private void DownBackup(string fileName, string zipPath) { string path = Server.MapPath(zipPath); FileInfo file = new System.IO.FileInfo(@path); Response.Clear(); Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName) + ".zip"); Response.AppendHeader("Content-Length", file.Length.ToString()); Response.Charset = "gb2312"; string fileExtension = file.Extension; // 根据文件后缀指定文件的Mime类型 switch (fileExtension) { case ".mp3": Response.ContentType = "audio/mpeg3"; break; case "mpeg": Response.ContentType = "video/mpeg"; break; case "jpg": Response.ContentType = "image/jpeg"; break; case "........等等": Response.ContentType = "...."; break; default: Response.ContentType = "application/octet-stream"; break; } Response.TransmitFile(file.FullName); Response.End(); Response.Write("<script>window.close();</script>"); } |
|
2个月前 kony : HttpResponse.TransmitFile() 没试过,看了MSDN的介绍,是采用流动形式输出。 建虚拟目录没试过,这种方式与创建快捷方式差不多。 采用二级域名也是避免不了URL暴露的问题。 还有没有其它方法? |
|
2个月前 deerchao : 我就晕了,你就算暴露URL,直接让IIS去响应,它还不得从硬盘读文件,然后发送内容,做TransmitFile完全相同的工作? TransmitFile本身已经针对各种情况下的性能做了优化. |
|
2个月前 kony : 我不懂TransmitFile怎么实现,是否一次性把整个文件加载到内存,然后IIS再提交提交给客户端。 如果客户直接下载文件,应该是不把文件一次性加载到内存中。 这是我的理解,不知道是否正确。 |
|
2个月前 deerchao : 看具体情况了. 如果文件很小,内存又多,当然应该一次性加载整个文件,并且缓存一段时间. 如果文件很大(比如一个高清电影文件几十G),内存不够,肯定只能读一部分发送一部分. TransmitFile的实现是不做缓存. 如果你的情况下确实需要缓存的话,也可以自己用FileStream读取内容,然后用HttpRuntime.Cache缓存,然后使用HttpResposne.OutputStream.Write(byte[],int, int)来传输数据. |
|
2个月前 kony : Response.Clear(); Response.ContentType = "application/x-zip-compressed"; Response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(FileName)); Response.TransmitFile(FileName); Response.End(); 结果下载后打开文件失败,提示****.css无法打开,奇怪! |
|
2个月前 deerchao : Response.ContentType = "application/x-zip-compressed"; 你确定下载的文件是zip文件吗? 如果是其它格式的文件,可以到这里看看它的MIME类型是什么: http://www.w3schools.com/media/media_mimeref.asp . |