在浏览器中下载及打开文件的代码
2013-10-28 15:57
405 查看
在asp.net中,下载文件和在浏览器中打开文件是经常使用的一个功能。
其中的关键点有三个:
[b] 1 ContentType
[/b]2 URL
3Content-disposition
1 ContentType
表示类容类型决定浏览器将以什么形式、什么编码读取这个文件。
例如myimage.gif,表示输出gif图片,application/pdf表示输入pdf文档,application/msword表示输出word文档常见ContentType
2URL
由于需要用到某一个文件,而文件经常是中文的,这就需要处理url,否则就有可能出现乱码,导致下载打开失败。3Content-disposition
这则是控制在浏览器中下载还是直接打开文档。需要说明的是,打开的代码,可能由于浏览器的不同,也有可能不会在浏览器中打开,而出现必选在保存再打开的情况。打开下载代码
/// <summary> /// 在浏览器中打开文件,由于浏览器的不同,也有可能不会打开文件,而是变成了必须保存后才能打开 /// </summary> /// <param name="filpath"></param> /// <param name="filename"></param> public static void OpenFile(string filpath, string filename) { long fileSize = 0; byte[] fileBuffer; HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.CacheControl = "no-cache"; HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache"); HttpContext.Current.Response.ContentType = "application/pdf;";//输出类型 HttpContext.Current.Response.Charset = "charset=utf-8"; HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UrlEncode(filename) + "\";");//在浏览器中打开文档,对文件名进行处理 using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read)) { fileSize = fileStream.Length; fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); fileStream.Close(); } HttpContext.Current.Response.BinaryWrite(fileBuffer); HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//文件大小 HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } /// <summary> /// 在浏览器中下载文件 /// </summary> /// <param name="filpath"></param> /// <param name="filename"></param> public static void DownFile(string filpath, string filename) { long fileSize = 0; byte[] fileBuffer; HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.CacheControl = "no-cache"; HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache"); HttpContext.Current.Response.ContentType = "application/pdf;";//输出类型 HttpContext.Current.Response.Charset = "charset=utf-8";//编码 HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UrlEncode(filename) + "\";");//在浏览器中打开文档,对文件名进行处理 using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read)) { fileSize = fileStream.Length; fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); fileStream.Close(); } HttpContext.Current.Response.BinaryWrite(fileBuffer); HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//文件大小 HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } private static string UrlEncode(string filename) { return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8); }
代码2
public class OpenDownFile { /// <summary> /// 在浏览器中打开文件,由于浏览器的不同,也有可能不会打开文件,而是变成了必须保存后才能打开 /// </summary> /// <param name="filpath"></param> /// <param name="filename"></param> public static void OpenFile(string filpath, string filename,string filetype) { long fileSize = 0; byte[] fileBuffer; HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.CacheControl = "no-cache"; HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache"); HttpContext.Current.Response.ContentType = filetype;//输出类型 HttpContext.Current.Response.Charset = "charset=utf-8"; HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UrlEncode(filename) + "\";");//在浏览器中打开文档,对文件名进行处理 using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read)) { fileSize = fileStream.Length; fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); fileStream.Close(); } HttpContext.Current.Response.BinaryWrite(fileBuffer); HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//文件大小 HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } /// <summary> /// 在浏览器中下载文件 /// </summary> /// <param name="filpath"></param> /// <param name="filename"></param> public static void DownFile(string filpath, string filename,string filetype) { long fileSize = 0; byte[] fileBuffer; HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.CacheControl = "no-cache"; HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache"); HttpContext.Current.Response.ContentType =filetype;//输出类型 HttpContext.Current.Response.Charset = "charset=utf-8";//编码 HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UrlEncode(filename) + "\";");//在浏览器中打开文档,对文件名进行处理 using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read)) { fileSize = fileStream.Length; fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); fileStream.Close(); } HttpContext.Current.Response.BinaryWrite(fileBuffer); HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//文件大小 HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } private static string UrlEncode(string filename) { return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8); } }
相关文章推荐
- ###下载文件总是提示action文件【一定是response响应头设置无效(代码没执行)或者没设置】【response写会浏览器必须放在最后一句,保证响应头设置执行】
- 使用Servlet实现文件下载的时候,避免浏览器自动打开文件
- 屏蔽浏览器打开下载文件方法
- 十进制转化成2,8,16进制数工具。将代码全部复制到一个txt文档中保存,并将文件后缀.txt改为.html,再浏览器打开即可
- C#文件下载实例代码(适用于各个浏览器)
- 点击文件下载而不在浏览器中打开
- JavaWeb文件下载,提示用户保存而不是让浏览器直接打开
- Java防止浏览器直接打开下载的文件
- [置顶] 如何在浏览器中打开PDF文件并实现预览的思路与代码
- 直接让浏览器下载文件而不打开
- 在iis中设置文件下载而不是在浏览器上打开
- web项目下载TXT文件防止浏览器直接打开
- php -- PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件
- 直接下载文件,而非在浏览器中打开
- 使用Servlet实现文件下载的时候,避免浏览器自动打开文件
- 超简单快速实现附件上传(各种格式文件)和下载显示(调用浏览器下载后选择可以打开的应用查看)
- PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件
- 解决ie下载excel文件直接在浏览器打开的问题(tomcat,web项目)
- php强制文件下载(避免文件或图片直接在浏览器中打开)
- 安卓自带浏览器无法打开一些下载的APK文件(tomcat中配置MIME类型)