博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet下载文件名乱码问题
阅读量:7014 次
发布时间:2019-06-28

本文共 3541 字,大约阅读时间需要 11 分钟。

  hot3.png

在使用Plupload(前端上传组件)+servlet 进行文件下载功能的时候(注:) 出现下载到本地的文件,文件名乱码的问题。解决方案如下: 后台代码:

import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.net.URL;import java.net.URLEncoder;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;/** * 文件在线查看及下载服务 * --------------------------------------------------------------------- * 日期			作者			操作类型				备注 * 2016-09-05	banyk		新建						 *  */public class FileDownloadServlet extends HttpServlet {			private static final long serialVersionUID = -7825355637448948579L;		public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		doPost(request,response);	}		protected void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		String isOnLine = request.getParameter("onLine");		String filePath = request.getParameter("filePath");		String fileName = request.getParameter("fileName");		String fileType = request.getParameter("fileType");		if(StringUtils.isNotBlank(fileType) && StringUtils.isNotBlank(filePath) && fileType.equals("xtwj")){			/*if (filePath.equals("jbqkDaTemplate")) {				filePath = this.getClass().getClassLoader().getResource("/").getPath()						+ sc.getJbqkDaTemplatePath() + "/" + fileName;			}else if(filePath.equals("jfpjTemplate")){				filePath = this.getClass().getClassLoader().getResource("/").getPath()						+ sc.getJfpjTemplatePath() + "/" + fileName;			}*/		}else{			if(filePath==null || "".equals(filePath)){				response.sendError(404, "filePath is not fond!");				return;			}			 		}				File file = new File(filePath);		if(!file.exists()){			response.sendError(404, "File not fond!");			return;		}		BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));        byte[] bs = new byte[1024];        int len = 0;        response.reset(); // 非常重要        if (isOnLine != null && "onLine".equals(isOnLine)) { // 在线打开方式            URL u = new URL("file:///" + filePath);            String contentType = u.openConnection().getContentType();            response.setContentType(contentType);            response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));        } else {            // 纯下载方式            response.setContentType("application/x-msdownload;charset=UTF-8");            response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));        }        response.setCharacterEncoding("UTF-8");        OutputStream out = response.getOutputStream();        while ((len = br.read(bs)) > 0) {        	out.write(bs, 0, len);        }        out.flush();        out.close();        br.close();	}		@Override	public void init(ServletConfig config) throws ServletException {		super.init(config);	}	}

注: response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8")); 在response设置Header的时候记得将其转码,设为UTF-8。

前端代码:

window.open($.page.serviceSiteRootUrl + "download.srv?filePath=" + fileURL + "&fileName=" +encodeURI(fileName), "_blank");

注:** &fileName=" +encodeURI(fileName)** 其实出现中文乱码的问题不是出在后台,而是出现在前端js代码上,如果在get传参的过程中对于中文没有进行编码操作,中文乱码问题就会出现。

一般来说,解决乱码问题可以通过debug来分为从前到后,再从后到前的步骤来测试,可以用来确定是前端编码问题还是后端编码问题,便于解决。

转载于:https://my.oschina.net/byk/blog/746577

你可能感兴趣的文章
帮助函数
查看>>
自己动手写Android插件化框架,让老板对你刮目相看
查看>>
[转]Object.keys()和for in的排序问题
查看>>
Dedecms判断当前栏目下是否有子栏目
查看>>
常见的加密和解密算法—AES
查看>>
HTTPS那些事(二)SSL证书(转载)
查看>>
【PIC学习第2例】PIC16F877A LED闪烁
查看>>
Orchard CMS前台页面为什么没有Edit链接?
查看>>
判断URL文件是不是在于在。
查看>>
GNU C中的零长度数组(转载)
查看>>
SQL2005中时,Diagrams的问题
查看>>
[转]软件架构的一致性
查看>>
拨云见日,任重道远 ——第六届云计算大会感悟
查看>>
PID控制器的应用:控制网络爬虫抓取速度
查看>>
cad中关于点样式点的绘制
查看>>
学习计划--20160424
查看>>
CentOS VMware 下SSH配置方法详解
查看>>
PHP错误级别 error_reporting() 函数详解
查看>>
jdk环境变量配置
查看>>
为网卡配置多个IP地址(windows)
查看>>