Posted on 2004-10-14 16:19
柚子Nan 阅读(6694)
评论(22) 编辑 收藏 所属分类:
[技术.Net]
Feedback
首先说明一下,本人不懂asp.net,仅从http协议来谈一谈
在协议包头中设定Content-Type可以告知浏览器传回数据的类型,比如pdf文件,就设为Content-Type: application/pdf,不知道是不是这个问题呢
具体如何用.net实现,而且”能否不考虑文件的类型”,我就不知道了
不知楼主“直接把文件显示到浏览器”是什么意思,是否是让浏览器以一堆文本乱码的形式显示比如一个doc
.txt默认 也可以打开吧
其他的文件格式例如.doc里面包含特定文件格式代码,例如:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}
{\*\generator Msftedit 5.41.21.2500;}\viewkind4\uc1\pard\lang2052\f0\fs20 dfdfdsfdsf\par
\par
}
所以,用Response.WriteFile也不行,只有抽取里面的特定文本来显示了。
@问题男
要求就是把文件的内容按照正确的格式显示到页面上!
@caca
txt默任打开以后,汉字是乱码,我用的是utf-8
那就是,比如一个pdf,则要求浏览器创建一个内嵌的reader来阅读之了?
那么我想我先前所描述的方法就可以实现,也看到你使用了,就是HttpResponse.AppendHeader这个方法
可以简单的根据扩展名设置不同的Content-Type。比如pdf文件,Response.AppendHeader("Content-Type","application/pdf");
其他的可以参见rfc
查了查msdn,有HttpResponse.ContentType属性,那就无需用HttpResponse.AppendHeader了
文件不要加编码,直接writefile
谢谢问题男 ,
我已经解决了msword,vnd.ms-excel,vnd.ms-powerpoint和各种图片,
但是有个这样的问题,每次打开文件都会提示你保存还是打开!
有没有办法不让弹出这个对话矿,默认直接打开?
另外,pdf还没有找到正确的Content-Type是什么?
如果txt文件设置Response.ContentType="text/plain";
那么显示的是乱码,如果使用默认的Response.ContentType = "text/HTML"; 那么显示出来汉字,但是格式丢失了,我的意思是回车和tab都都是了
Response.ContentType="application/pdf";这个好象不正确!
呵呵,毕竟不是搞这方面应用的,我所知有限
先前我是在google上随便搜了一个pdf,打开后就是你所需要的效果,于是我想只要封包和这个一样效果必然也是一样的,然后在打开这个文件的同时截获了网络封包,看到ContentType: application/pdf,如果不是我也不清楚该是什么了,呵呵
这样吧,我在帮你看看rfc,如果有什么收获再来交流
如果不使用这种方式,另外一种方式真的可以不用关心文件的类型
关键点: 用脚本控制,在本窗口打开window.location.href=文件名,
在新窗口打开window.open(‘文件名’),
另外,rtf,doc,ppt,xls,xml,html用
Response.ContentType="application/msword";
Response.ContentType="application/vnd.ms-excel";
Response.ContentType="application/vnd.ms-powerpoint";
Response.ContentType = "text/xml";
Response.ContentType = "text/HTML";
quote:
但是有个这样的问题,每次打开文件都会提示你保存还是打开!
有没有办法不让弹出这个对话矿,默认直接打开?
----------------------------------------------------------------------------
有哪几种格式会有提示?还是全部都有?
qoute:
如果不使用这种方式,另外一种方式真的可以不用关心文件的类型
关键点: 用脚本控制,在本窗口打开window.location.href=文件名,
在新窗口打开window.open(‘文件名’),
------------------------------------------------------------------------------------------
这种方式就是直接向http服务器请求资源了,服务器发现不是网页也不是支持的脚本(aspx、asp、php等等)会自动设置文件的content type和你主动设置是一样的
你不妨截获封包看看两种方式的差别,就能找到原因了,毕竟http包是一致的在client端就不会有不同
btw:
我刚刚看了看
http://www.faqs.org/rfcs/rfc1521.html 介绍mime的
http://www.isi.edu/in-notes/iana/assignments/media-types/media-types 蛮全的列表
好像pdf就是application/pdf
doc xls ppt rtf 都会弹出对话框,但是还是可以打开的
pdf估计是ContentType没有设置正确
我使用string strScript = "<script>window.location.href='"+"test.pdf"+"'; </script>";
Response.Write(strScript);
可以打开了pdf,没有问题的,这样就不属于同一种机制了
xml不会,而且格式正确
txt,html不会,但是格式错误,把回车都删除了
如果可以,你将两种方法都做一个页面,就用pdf好了,我帮你看看
Response.Clear();
Response.AppendHeader("Content-Disposition","inline;filename=result.doc");
Response.ContentType="application/ms-word";
Response.WriteFile(Server.MapPath("Yuan.doc"));
ContentType可以在注册表的CLASSES_ROOT中查到。
今天我遇到的这个问题,在这里说一下,我想让用户点击一个Button然后,直接保存一个Bmp图片(不是直接在网页中打开),不知道怎样设置。
BTW:设置为“application/bmp”,默认会用Mspaint直接打开.
Response.AppendHeader("Content-Disposition","inline;filename=" + drpFileList.SelectedItem.Text);
你把inline;改成另外一个attachment试试看
在数据库中保存下HtmlInputFile.PostedFile.ContentType就可以实现打开任何类型的文件了
Response.Clear();
Response.AppendHeader("Content-Disposition","inline;filename=result.doc");
Response.ContentType=数据库中的类型值;
Response.WriteFile(Server.MapPath("Yuan.doc"));
打开注册表的HKEY_CLASSES_ROOT分支,就可以看到所有的Content-Type了。
不知道我说的对不对呢??