首先是html页面代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h2>请点击进行文件的下载</h2><h3>超链接的下载</h3><a href="/Servlet/download/aaa.txt">aaa.txt</a><br/><a href="/Servlet/download/E75A8555.JPG">E75A8555.JPG</a><br/><a href="/Servlet/download/E75A8690.JPG">E75A8690.JPG</a><br/><a href="/Servlet/download/zhcx.rar">zhcx.rar</a><br/><h3>手动编码方式下载</h3><a href="/Servlet/DownloadServlet?filename=aaa.txt">aaa.txt</a><br/><a href="/Servlet/DownloadServlet?filename=美女.JPG">美女.JPG</a><br/><a href="/Servlet/DownloadServlet?filename=E75A8690.JPG">E75A8690.JPG</a><br/><a href="/Servlet/DownloadServlet?filename=zhcx.rar">zhcx.rar</a><br/>
</body>
</html>

可以清晰的看到在手动编码方式下载过程中是有一个中文名的文件,但是在下载过程中我们要解决两个方面,则不会出现下载时中文名变成乱码
1、当我们将文件名从html传到servlet的时候这时候以get的方式会接受到乱码,所以我们在接收参数的时候应该这样写

String filename=new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");

这样的话我们接收的就是中文
2、根据不同的浏览器要进行不同的操作,故我们应该先检查一下浏览器的类型代码如下:

//根据浏览器的类型处理中文文件的乱码问题:String agent=request.getHeader("User-Agent");if(agent.contains("Firefox")){filename=base64EncodeFileName(filename);}else{filename=URLEncoder.encode(filename,"UTF-8");}

只要满足以上两点,则下载时中文名便不会出现乱码的现象。
完整的Servlet代码如下,需要的小伙伴可以自行参考:

package download;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;/*** 文件下载的编写*/
public class DownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.接收参数String filename=new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");//2完成文件下载(设置Content-Type头、设置Content-Disposition头、设置文件的InputStream)//2.1设置Content-Type头String type=this.getServletContext().getMimeType(filename);response.setHeader("Content-Type", type);//2.3设置文件的InputStreamString realPath=this.getServletContext().getRealPath("/download/"+filename);//根据浏览器的类型处理中文文件的乱码问题:String agent=request.getHeader("User-Agent");if(agent.contains("Firefox")){filename=base64EncodeFileName(filename);}else{filename=URLEncoder.encode(filename,"UTF-8");}//2.2设置Content-Disposition头response.setHeader("Content-Disposition", "attachment;filename="+filename);InputStream is=new FileInputStream(realPath);//获得response的输出流OutputStream os=response.getOutputStream();int len=0;byte[]b=new byte[1024];while((len=is.read(b))!=-1){os.write(b, 0, len);}is.close();}public static String base64EncodeFileName(String fileName) {BASE64Encoder base64Encoder = new BASE64Encoder();try {return "=?UTF-8?B?"+ new String(base64Encoder.encode(fileName.getBytes("UTF-8"))) + "?=";} catch (UnsupportedEncodingException e) {e.printStackTrace();throw new RuntimeException(e);}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

文件的下载(2)——解决下载文件名的乱码问题相关推荐

  1. android文件路径长度限制,如何解决Win7文件名长度过长问题?

    电脑用久了总是会产生垃圾,这时候我们就得去清理,但是有时候清理到一些文件夹的时候却提示"该文件夹包含名称过长且无法放入回收站的项目",那么当你遇到文件名长度过长怎么办?不知道的朋友 ...

  2. 详解修改docker镜像源加速下载(解决下载apollo修改docker源后下载速度仍然十分慢问题)

    先附上修改成功后加速Apollo(百度自动驾驶)下载的效果图,实测下载速度高达15Mbps!⬆ 不想看解释的请无脑跳到解决方案部分 当我们想通过国内镜像源加速apollo镜像下载时(即加速docker ...

  3. java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...

    中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. $file_name = urlencode($_RE ...

  4. 解决各大浏览器下载文件,文件名中文乱码的问题

    https://blog.csdn.net/fengchao2016/article/details/55188805/ 使用Trident和Edge关键字来判断是否是微软的浏览器(微软抛弃了IE,开 ...

  5. 解决FlashFXP5 不能下载中文文件名文件的问题(显示文件名中文正常下载文件名是乱码)

    服务器(Windows)配置了Serv-U_14,使用FlashFXP5.0客户端能正常连接ftp服务器,列表没有问题,文件名显示也正常.上传.下载英文文件名的文件没有问题,部分中文文件名的文件下载出 ...

  6. Android之解决PC端上传http表单格式文件手机解析文件名乱码问题和PC浏览器下载文件的文件名显示乱码问题

    1 问题 问题1. 手机写socket作为服务器,PC浏览器上传http表单格式文件,然后手机端解析携带中文的文件名我解析是乱码. 问题2. 手机写了socket作为服务器,PC浏览器下载文件,但是浏 ...

  7. Asp.net生成Excel文件并下载(解决使用迅雷下载页面而不是文件的问题)

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 先试用Response.WriteFile的方法: FileInfo fi = new FileInfo(excelFile); ...

  8. php header下载中文名称,PHP Header下载文件在IE文件名中文乱码问题

    解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码就可以解决了. 解决方案一,我的页面是utf-8编码,代 ...

  9. Java解决下载--文件名乱码

    最近常有人问到下载文件文件名出现乱码问题,今天统一给出解决方案如下 通常都会通过URLEncoder转码的方式来解决,关键代码如下: response.setContentType( "ap ...

  10. 文件下载(解决中文文件名下载乱码问题)(二)

    针对"文件下载(解决中文文件名下载乱码问题)"出现的问题:在弹出的文件下载框选择"打开"不能正常打开文件. 下面的代码可解决此问题: java 代码 <% ...

最新文章

  1. 2017最新整理传智播客JavaEE第49期 基础就业班
  2. 第五章 深度神经网络为何很难训练
  3. 图像的亮度和对比度区别
  4. 戏说 Windows GDI (2)
  5. html js不触发_图文详解鼠标事件CSS:hover和JS:mouseover的区别
  6. 测试点分析:1048 数字加密 (20分)_16行代码AC
  7. codeforces1497 E. Square-free division(数学+dp)
  8. CDNOW用户消费行为分析报告(python+ppt)
  9. 从中师到博士,我的22年...
  10. 那些年,我写过的设置Windows系统变量的vbs脚本
  11. [USACO 09FEB]Fair Shuttle
  12. jquery左边滚动,完毕后跳转回来
  13. Sublime Text插件
  14. 求n个连续自然数之和为一个非负整数的数组
  15. 「ZigBee模块」协议栈-串口透传,打造无线串口模块
  16. GFLOPs、GMACs、FMA之间的关系
  17. PHP+Wampserver(其中的MariaDB数据库)制作留言板
  18. 软件测试灵魂三问,如何回怼?
  19. czl蒻蒟的OI之路16
  20. linux麒麟v10专有机关闭防火墙或开放端口的解决办法

热门文章

  1. 数学建模----拟合的实现
  2. 网线连接问题--部分短路
  3. Windows重定向技术【文件重定向与注册表重定向】
  4. 长安大学微型计算机原理与接口技术答案,长安大学考研专业课《815微机原理与接口技术》真题解析 考点 冲刺.pdf...
  5. 企业微信如何退出之前的公司
  6. 【计组】懂了,时钟周期、机器周期、指令周期、总线周期、存储周期。
  7. 翻译:SMPL-X模型与SMPLify-X方法
  8. CSharp学习笔记
  9. windows - PHP 开发环境搭建
  10. Android_线程_多线程下载