看了很多左键点ie链接可以下载文件而不是直接打开的例子,但大多都是用了stream类似的方法。即由url得到下载文件的全路经,直接使用输入/输出流,把这个文件传给客户端。但我现在做的一个项目中,出于安全的要求,不能让用户由数据流获得文件,(所有访问权限都由url判定),所以下载文件必须用url重定向的方法。即<a href="下载文件的url"> 或者在servlet里 response.sendRedirect("url");
可是这样鼠标左键点击就会使ie直接打开文件(有时候不能识别的字符码文件也会强行打开)请问有没有啥方法能在服务器端控制该文件的下载方式,(不能用stream的方法)。
可是这样鼠标左键点击就会使ie直接打开文件(有时候不能识别的字符码文件也会强行打开)请问有没有啥方法能在服务器端控制该文件的下载方式,(不能用stream的方法)。
解决方案 »
- 请高手帮帮忙,Java多线程与图形界面的问题
- 求助 关于组合问题,希望各位前辈、高手给予支持 ....不吝感激
- 请问Java Script 和JAVA有什么差别?我完全是新手。。。
- 请教兄弟姐妹们;怎么样检查打印机的状态呢?(忘了输入共享打印机密码等等,或者干脆共享打印机那台机器关掉了)
- 急求:b/s中java实现ftp多线程文件上传(服务器端对服务器端)重点(客户端ie对服务器端)原代码
- 请教啊~~关于I/O的!!(会另谢)
- 用InputStream读文件怎么判断换行?
- 请教nio阻塞问题
- 在线等待:JAVA中如何把当前时间转换成“YYYYMMDD"的形式,最好给出代码!谢谢
- 转换问题!
- JAVA相同接口类的强制转换问题
- 如何扩展JTable的功能?
以tomcat为例
在web.xml里添加mime映射
比如加入RAR类型的映射
<mime-mapping>
<extension>rar</extension>
<mime-type>application/octet-stream</mime-type>
</mime-mapping>
具体哪种文件用什么mime映射 去网上搜一下就有了
如果用数据流的话,能访问 "下载功能的那个servlet" 的用户随便加个参数就能下载他想要的东西了。
并把他设置为隐藏的,
并让你a标签的target属性指向该标签iframe就行了
<a href="下载文件的url" target="aa">
可是你用这种“URL 直接访问物理文件”的方式,连“随便加个参数”都不需要,直接敲那个 URL 就能下载他想要的东西了。不能总是“领导让干啥就傻干”,至少要弄清楚领导为啥让这么干,这样才有可能终有一天当上领导,haha :D其实“安全问题”应该不是这两种方式的主要差异。“用专门的 servlet 负责下载”的方法可以在那个 servlet 里直接处理授权问题;“用 URL 直接访问物理文件”的方式可以通过设置拦截器等方式处理授权问题。真正的区别在于,前者适合于提供动态生成的文件内容,后者适合提供静态内容。如果用于提供下载的内容是静态内容(也就是事先已经固化成为一个文件的形式),那就可以用这种方法直接由 Web 服务器负责把文件回传给客户端。那么回到楼主的问题,如何控制客户端的下载方式也就成了 Web 服务器的责任。那就用 5 楼的正宗解法吧 :)
1 依然会发送一个完整的链接给用户,你用flashget 下载看看就看到了,所以不安全的。2 直接下载,需要修改你的 应用服务器里面的 <mime-mapping>
这个根据服务器不同,做法也不一样。
tomcat 里面就是 tomcat/conf/web.xml
这样做安全很多啊,通过inputstream来获取硬盘上的路径,可以起到隐藏服务器文件路径的作用,至于你说的
不能让用户由数据流获得文件,只要在形成outputstream之前判断一下用户名或权限之类的就行了啊,
<iframe name="aa" style="display: none;"> </iframe>标签只是防止左键点击下载的时候会打开一个空白的IE页面
你可以简单的理解为一张表
对应关系就是 .文件名 -> 处理方式
所以,修改MIME你就能让WORD去打开RAR文件,用EXCEL去打开HTML等等等等。。如果简单的需要让这一类型文件被下载
就设成application/octet-stream<mime-mapping>
<extension>rar</extension>
<mime-type>application/octet-stream</mime-type>
</mime-mapping>
<mime-mapping>
<extension>doc</extension>
<mime-type>application/octet-stream</mime-type>
</mime-mapping>
.................一般默认的MIME映射本来就有很多了,不同的服务器配置文件位置不用,实在找不到用搜索文件-包含文字MIME
来找,一般来说大多JSP容器都是在一个XML里