- 浏览: 460393 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
此去经年雪123:
为啥生成的是乱码 你好
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
alonglw:
zxf0089216 写道1.为什么每次都是10001RSAK ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
zxf0089216:
1.为什么每次都是10001RSAKeyPair(" ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
dunhanson:
后台的测试main方法都能加密解密。前台加密后的密文交给后台解 ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
map612:
wula0010 写道仔细看了下,可以运行RSAUtil.ma ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
servlet实现下载时,如果客户端安装了迅雷,发现不能正确下载。查找原因后发现是http头设置的问题,如文件类型CONTEN-TYPE、文件长度CONTEN-LENGTH。
具体解决如下:
response.setHeader("Content-Disposition", "attachment;filename=" + browName); response.setContentLength(fileSize); response.setContentType(contentType); byte[] fileByte = new byte[1024]; while (fileInputStream.read(fileByte) > 0){ out.write(fileByte, 0, fileByte.length); } out.flush(); out.close(); out = null;
其中,
response.setContentLength(fileSize);
response.setContentType(contentType);
两句是关键。
另外,如果不想使用讯雷监控附件下载,可以取消讯雷对IE的监控。方法如下图所示
========================================
关于下载中文文件名的问题,不同浏览器需要使用不同的编码,下载前要在Java中进行文件名编码,实现如下:
private static String encodeFileName(HttpServletRequest req, String name) throws UnsupportedEncodingException { String agent = req.getHeader("USER-AGENT").toLowerCase(); if (agent != null && agent.indexOf("firefox") < 0 && agent.indexOf("safari") < 0) { return URLEncoder.encode(name, "UTF8"); } return new String(name.getBytes("UTF-8"), "ISO8859-1"); }
在多数浏览器中使用 UTF8 ,而在 firefox 和 safari 中使用 ISO8859-1 。经测试在 IE、Firefox、Chorme、Safari、Opera 上都能正常显示中文文件名(只测试了较新的浏览器)。
评论
5 楼
boreas_baosj
2009-12-16
问题解决了,下载的代码没有问题,是请求的路径中加了其它参数,而下载工具会不断的请求导致第二次得不到路径中参数的值,因为我是用post请求,改成get就OK
4 楼
boreas_baosj
2009-12-15
网速不好多点了几下
3 楼
boreas_baosj
2009-12-15
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path = request.getParameter("path"); try { String fileName = request.getParameter("fileName").trim(); int c = fileName.lastIndexOf("."); String name = fileName.substring(0, c > 0 ? c : fileName.length()) + "." + path.substring(path.lastIndexOf(".") + 1, path.length()); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachement;filename=" + new String(name.getBytes("GBK"), "ISO-8859-1")); File file = new File(Const.getCurrentUtterlyPath() + path); if (!file.exists()) { throw new IOException(fileName + ",所下载的文件不存在!"); } response.setContentLength(Integer.parseInt(file.length() + "")); InputStream fs = new FileInputStream(file); OutputStream os = response.getOutputStream(); byte[] buff = new byte[1024]; int readCount = 0; while ((readCount = fs.read(buff)) != -1) { os.write(buff, 0, readCount); } if (fs != null) { fs.close(); } if (os != null) { os.close(); } } catch (IOException e) { LOG.error("error: " + e.getMessage() + ",path: " + path); throw e; } response.setStatus(response.SC_OK); response.flushBuffer(); }
2 楼
boreas_baosj
2009-12-15
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path = request.getParameter("path"); try { String fileName = request.getParameter("fileName").trim(); int c = fileName.lastIndexOf("."); String name = fileName.substring(0, c > 0 ? c : fileName.length()) + "." + path.substring(path.lastIndexOf(".") + 1, path.length()); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachement;filename=" + new String(name.getBytes("GBK"), "ISO-8859-1")); File file = new File(Const.getCurrentUtterlyPath() + path); if (!file.exists()) { throw new IOException(fileName + ",所下载的文件不存在!"); } response.setContentLength(Integer.parseInt(file.length() + "")); InputStream fs = new FileInputStream(file); OutputStream os = response.getOutputStream(); byte[] buff = new byte[1024]; int readCount = 0; while ((readCount = fs.read(buff)) != -1) { os.write(buff, 0, readCount); } if (fs != null) { fs.close(); } if (os != null) { os.close(); } } catch (IOException e) { LOG.error("error: " + e.getMessage() + ",path: " + path); throw e; } response.setStatus(response.SC_OK); response.flushBuffer(); }
1 楼
boreas_baosj
2009-12-15
最近用servelt写了一个小东西,管理文件的,设置了response.setContentType("application/octet-stream");和response.setContentLength(Integer.parseInt(file.length() + ""));使用下载工具的时候就有问题,直接用浏览器保存就可以,不可能让客户在迅雷的浏览器监视中去取消吧,LZ应该看得出来文件名称是允许用户修改的,而且不限制重名,但是在服务器上的路径文件名是重新生成的,所以也不能放在WebContent下直接通过链接路径下载,网上找了很多都不是讲到点子上的,不知道可不可以在java代码中屏蔽掉下载工具呢?请问LZ有什么可以解决的方法吗?谢了
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path = request.getParameter("path"); try { String fileName = request.getParameter("fileName").trim(); int c = fileName.lastIndexOf("."); String name = fileName.substring(0, c > 0 ? c : fileName.length()) + "." + path.substring(path.lastIndexOf(".") + 1, path.length()); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachement;filename=" + new String(name.getBytes("GBK"), "ISO-8859-1")); File file = new File(Const.getCurrentUtterlyPath() + path); if (!file.exists()) { throw new IOException(fileName + ",所下载的文件不存在!"); } response.setContentLength(Integer.parseInt(file.length() + "")); InputStream fs = new FileInputStream(file); OutputStream os = response.getOutputStream(); byte[] buff = new byte[1024]; int readCount = 0; while ((readCount = fs.read(buff)) != -1) { os.write(buff, 0, readCount); } if (fs != null) { fs.close(); } if (os != null) { os.close(); } } catch (IOException e) { LOG.error("error: " + e.getMessage() + ",path: " + path); throw e; } response.setStatus(response.SC_OK); response.flushBuffer(); }
发表评论
-
linux、win下用jmx监控tomcat运行情况
2012-03-14 15:52 1585for windows: 1、add below lin ... -
[转]Java缩略图类带水印(jpg,png)
2011-08-31 09:09 1493package com.example; import ... -
swing和awt的两个简单使用
2011-08-29 13:27 11571、swing: package frame; ... -
[转]笔记:Hibernate性能优化事项(持续更新)
2011-08-27 10:38 15651、针对Oracle数据库而言 ... -
自定义classloader实现
2011-08-09 14:19 1385package classloader; import ... -
[总结篇]Java中从键盘接收一个字符
2011-05-29 21:53 2124引言 从控制台中读 ... -
利用commons-net包实现ftp上传下载例子
2011-01-19 16:50 3970下载文件的时候注意一下,第一个参数要用iso-8859_ ... -
请使用Oracle新版本驱动
2010-11-09 11:08 2514今天使用apache dbutils连接oracle10G时, ... -
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
2010-10-25 16:07 37635需求环境: 西安项目中,客户要求保护用户的密码信息,不 ... -
使用java.net.URL实现Post数据
2010-07-20 10:38 5920实现:利用URL访问URL并传递参数,然后获取返回结果。 可 ... -
java文件锁的实现
2010-07-02 16:37 7084项目使用到集群环境,流程发送时如果确保一个流程不会被两个流程同 ... -
如何导出大数据量的Excel文件
2010-05-25 09:07 2350一般导出Excel可以选择POI或者JXL,poi比较方便但是 ... -
Log4j使用总结
2010-01-09 09:50 919一、介绍 Log4j是Apa ... -
JMS-ActiveMQ入门实例
2009-11-04 11:49 7167下载ActiveMQ http://activemq.a ... -
Lucene+HighLighter高亮显示实例
2009-11-03 18:37 5159今天搞了一个关于Lucene的例子,权当入门教程。网上有很多资 ... -
JAVA操作Excel参考
2009-11-03 10:33 972Java Excel是一开放源码项目,通过它Java开发人 ... -
freemarker根据模板生成文件的编码问题
2009-10-20 15:46 2566用freemarker生成html静态文件时,涉及的编码主要有 ... -
RSS基本知识、开发相关
2009-09-27 11:43 1187RSSLibJ是一个专门读 ... -
Ant+xFire生成客户端代码实战
2009-09-12 16:41 2690生成xfire客户端有多种方式,直接调用xFire暴露的接口、 ... -
Spring中JdbcTemplate相关的几个接口
2009-09-07 16:48 19181、org.springframew ...
相关推荐
jsp+servlet实现文件下载(而不是在网页中显示出文件内容) 迅雷下载功能.zip
javax.servlet的jar包,解决找不到javax.servlet.*等问题的!欢迎下载!!
servlet下载文件
基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码...
Servlet实现文件上传与下载 Servlet 文件上传与下载
java servlet实现文件点击下载。 将资源解压后配置在tomcat中,输入http://localhost:8080/DownLoadFileDemo/即可看到点击下载的链接
Servlet文件下载
自己用servlet写的文件上传及下载功能带进度条 主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 ...
JAVA,JSP,SERVLET课件及一些常见问题解决方法
jsp传参 servlet接收中文乱码问题的解决方法.docx
java实现jsp+servlet文件下载及批量下载,mvc分层技术
解压 【javax.servlet-api-***.jar中文文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档...
Servlet中文件上传和下载,页面使用jsp里面实例化对象使用Javabean
赠送jar包:javax.servlet-api-4.0.0.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
文件下载servlet,java文件下载。
java 写的文件上传下载的例子,可以做简单图片文件服务器
这是一个使用servlet实现下载功能的小例子程序, 是一个完成的项目,使用netbeans开发的. 方便自己,方便别人
Servlet实现文件下载public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{ String str = this.getServletContext().getRealPath("/download/隐形的翅膀 -...
javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档
servlet api文档 servlet api说明文档servlet api说明文档