利用HTTP协议,更改输出文件
利用服务器端,动态生成脚本、xml文件或者图片的时候,总会有问题,另存的时候,保存的通常不是想要格式的扩展名,而是aspx或者jsp等。就如何解决,查阅了不少资料,最终发现,通过修改文件头,来使浏览器判定为相应格式。
?
例如:将页面表格另存为excel,这里用到一个小窍门,动态生成一个html表格,然后将扩展名改成xls,即可以用excel打开了。
?
设置类型
Response.ContentType = "application/vnd.ms-excel";//excel格式
或者下面的二进制格式。需要注意的是,如果设置成二进制格式,浏览器则判定为需要下载
Response.ContentType = "application/octet-stream";//二进制流
?
具体的ContentType资料,点这里
?
设置返回
Response.AppendHeader("content-disposition", "attachment;filename=\"exceltable.xls\"");
?
这样,保存的时候,自动提示的文件名就是exceltable.xls
?
附录一下content-disposition在HTTP协议1.1中的描述
19.5.1 内容处理
??? 内容处理应答报头已经被计划为一种如果用户请求把内容存成一个文件原服务器提供一个缺身文件名的方法。这种用法来自RFC 1806 [35]的定义。
??????? content-disposition = "Content-Disposition" ":"
????????????????????????????? disposition-type *( ";" disposition-parm )
??????? disposition-type = "attachment" | disp-extension-token
??????? disposition-parm = filename-parm | disp-extension-parm
??????? filename-parm = "filename" "=" quoted-string
??????? disp-extension-token = token
??????? disp-extension-parm = token "=" ( token | quoted-string )
??? 一个例子是:
????? Content-Disposition: attachment; filename="fname.ext"
??? 接收用户的代理不应该(SHOULD NOT)注意任何在文件名的参数中出现的文件路径信息,这个参数被认为仅仅是一个在这一次申请应用HTTP的参数。文件名应该(SHOULD)只被当作终端的一部分。
??? 如果在应答中用到的报头有程序/八位字节流内容类型,这暗示用户代理不应该现实应答(信息),而直接开始应答...'dialog。