Servlet:浏览器下载文件时文件名为乱码问题

 1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2         String filename = request.getParameter("filename");
 3         System.out.println(filename);
 4         String path = getServletContext().getRealPath("download/"+filename);
 5         // 将下载的文件设置成utf8编码(必须先找到文件真实路径path,再进行UTF8编码,否则服务器端找不到utf8编码后的文件名)
 6         filename = URLEncoder.encode(filename,"UTF-8");
 7         // 设置响应头,控制浏览器下载该文件
 8         response.setHeader("Content-disposition", "attachment;filename="+filename);
 9
10         InputStream is = new FileInputStream(path);
11         OutputStream os = response.getOutputStream();
12         int len = 0;
13         byte[] buffer = new byte[1024];
14         while((len = is.read(buffer)) != -1) {
15             os.write(buffer,0,len);
16         }
17         os.close();
18         is.close();
19     }

原文地址:https://www.cnblogs.com/ayeex/p/11707612.html

时间: 2024-11-05 19:40:37

Servlet:浏览器下载文件时文件名为乱码问题的相关文章

火狐浏览器下载文件保存文件名的乱码问题

String oldname = file.getName().substring(file.getName().indexOf("_")+1); String encodefileName = request.getHeader ( "user-agent" ).contains ( "MSIE" ) ? ("="+URLEncoder.encode ( oldfilename, "utf-8") ):(

浏览器下载文件时一共发送2次请求,如何把“下载次数”只记录为1次?

最近,个人官网实现了PDF下载功能,出于统计的考虑,增加了"下载次数"download_count这个字段. 但是,我今天突然发现,每次下载download_count都直接+2了.如果服务器发生这种事,还有一定的可能,本地就我一个人下载,怎么可能下载2次.于是,打开了log4j的debug模式,果然执行了2次更新请求. @RequestMapping(value = "/download/pdf") public void downloadPdf(@Request

下载文件时文件名是中文,文件名丢失或者乱码的问题

解决方案 针对不同浏览器类型,对文件名字做编码处理 Firefox (Base64) :IE.Chrome ... 使用的是URLEncoder public class DownloadServlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取文

解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题

最近做项目,采用Spring MVC做控制层,下载文件的文件名总是在主流浏览器上显示乱码,Firfox不是乱码了,IE下又成了乱码.也是烦,IE总是独树一帜,没办法,只能让程序去适应,在网上也搜索了很多,但是解决的不理想,主要是IE11作为主流浏览器后,很多人之前提出的方案都失效了. 简单来说,之前使用request获取header中的user-agent,通过MSIE关键字来判断是否是IE浏览器,如果是IE浏览器,使用utf-8对文件名编码就可以了.然而,IE11的user-agent已经没有

【转】正确处理浏览器在下载文件时HTTP头的编码问题(Content-Disposition)

最近在做项目时遇到了一个 case :需要实现一个强制在浏览器中的下载功能(即强制让浏览器弹出下载对话框),并且文件名必须保持和用户之前上传时相同(可能包含非 ASCII 字符). 前一个需求很容易实现:使用 HTTP Header 的 Content-Disposition: attachment 即可,还可以配合 Content-Type: application/octet-stream 来确保万无一失.而后一个需求就比较蛋疼了,牵扯到 Header 的编码问题(文件名是作为 filena

正确处理下载文件时HTTP头的编码问题(Content-Disposition)

转自:https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/ 最近在做项目时遇到了一个 case :需要实现一个强制下载功能(即强制弹出下载对话框,阻止浏览器尝试解析显示某些文件格式),并且文件名必须保持和用户之前上传时相同(可能包含非 ASCII 字符). 前一个需求很容易实现:使用 HTTP Header 的 Content-Disposition: attachment 即可,还可

[ASP.NET][C#]下载文件时中文文件名出现乱码

负责的网站在ASP.NET网页有一段下载Word/Excel文件的程序,最近使用者要求的文件名称内含繁体中文字, 同事用chrome/firefox浏览器测试下载都很正常显示,但用IE(版本11)开启时,却出现了乱码. 1.准备一个中文文件名的文件 ASP.NET MVC 2.在HomeControler中加入下载程序Download public ActionResult Download() { //文件位置 string filepath = @"E:testWebApplication1

IE浏览器下载文件保存时提示:“你没有权限在此位置中保存文件”解决办法

E浏览器下载文件保存时提示 解决办法: 1.Win + R,打开运行命令,输入gpedit.msc,如图所示 2.打开计算机本地组策略编辑器:选择计算机配置-windows设置-安全设置-本地策略-安全选项.在右侧找到“用户账户控制:以管理员批准模式运行所有管理员”,双击打开,如图所示 3.双击打开,设置为“已禁用”,,点击“应用”,“确定”如图所示 4.重启电脑,上述问题就不会再出现. 原文地址:https://www.cnblogs.com/chenshc/p/11827826.html

servlet 实现下载文件

servlet: public class UpAndDownServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); String type = request.getParam