文件上传下载过程中中文名称问题

//上传--
	// 1 保存数据到excel,对应的sheet头header,body数据类型list
	//2 上传文件到服务器中
	//下载--
	// 1 获取文件路径
	//2 导出数据到保持的路径(或者是浏览器路径)

	/**
	 * 保存数据到excel
	 * @param listBody
	 * @param sheetName
	 */
	public void saveExcelData(List<DocLibBrowseOrgVo> listBody, String sheetName) {
		XSSFWorkbook wb = new XSSFWorkbook();
		XSSFSheet sheet = wb.createSheet(sheetName);
		XSSFRow row = sheet.createRow(0);
		row.createCell(0).setCellValue("");
		row.createCell(1).setCellValue("");
		row.createCell(2).setCellValue("");

		int i = 0;
		for (DocLibBrowseOrgVo doc : listBody) {
			i++;
			row = sheet.createRow(i);
			row.createCell(0).setCellValue(doc.getDocLibId());
			row.createCell(1).setCellValue(doc.getDocLibName());
			row.createCell(2).setCellValue(doc.getCount());
			row.createCell(4).setCellValue(doc.getStatisticDate());
		}
	}

	/**
	 * 上传文件到服务器指定路径
	 *
	 * @param destPath
	 * @param fileName
	 */
	public void uploadFile(String destPath, String fileName, XSSFWorkbook wb) throws IOException {
		File pathFile = new File(destPath);
		if (!pathFile.exists()) {
			pathFile.mkdirs();
		}
		File destFile = new File(destPath + fileName);
		BufferedOutputStream buffer = new BufferedOutputStream(new FileOutputStream(destFile));
		wb.write(buffer);
		buffer.close();
	}

	/**
	 * 下载
	 *
	 * @param srcPath
	 * @param fileName
	 */
	public void downLoadFile(String srcPath, String fileName, HttpServletRequest request, HttpServletResponse response) {
		File file = new File(srcPath + fileName);
		if (file.exists()) {
			response.setContentType("application/force-download");// 设置强制下载不打开
			setFileDownloadHeader(request, response, fileName); //解决中文名称

			byte[] buffer = new byte[1024];
			FileInputStream fis = null;
			BufferedInputStream bis = null;
			OutputStream os = null;
			try {
				fis = new FileInputStream(file);
				bis = new BufferedInputStream(fis);
				os = response.getOutputStream();//到浏览器下载路径

				int i;
				while ((i=bis.read(buffer))!= -1) {
					os.write(buffer, 0, i);
					i = bis.read(buffer);
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (bis != null) {
					try {
						bis.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (fis != null) {
					try {
						fis.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	/**
	 * 解决中文名称
	 * @param request
	 * @param response
	 * @param fileName
	 */
	public void setFileDownloadHeader(HttpServletRequest request, HttpServletResponse response, String fileName) {
		try {
			//中文文件名支持
			String encodedfileName;
			String agent = request.getHeader("USER-AGENT");
			if (null != agent && agent.contains("MSIE")) {//IE
				encodedfileName = java.net.URLEncoder.encode(fileName, "UTF-8");
			} else if (null != agent && agent.contains("Mozilla")) {
				encodedfileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
			} else {
				encodedfileName = java.net.URLEncoder.encode(fileName, "UTF-8");
			}
			response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\"");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}

  

原文地址:https://www.cnblogs.com/Andrew520/p/9251881.html

时间: 2024-07-31 23:39:52

文件上传下载过程中中文名称问题的相关文章

java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题

//文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input) { boolean success=false; FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp try{ if(port>-1) { ftp.con

WEB文件上传下载过程简介(基于Struts2)

WEB文件上传过程简介(基于Struts2),页面上传.Action收取.解析:文件导出 文件处理过程,需要注意对文件的定期清理,避免磁盘占用过多: 1. jsp页面:   <s:file required="true" name ="myFile" theme="zx2"/> <s:form action ="myfile.action" name="form" method =&quo

使用Apache Commons Net API实现FTP上传下载过程中的坑点

最近项目需要实现FTP上传.下载功能,采用了Apache Commons Net API.代码很快就完成了,但由于对相关API使用场景不是很熟悉,走了一些弯路,抽一点时间做一下总结. A)主动被动模式选择:FTP主动模式和被动模式的详细介绍可以参考(http://blog.csdn.net/huanggang028/article/details/41248663).大概意思就是主动模式是客户端向服务端发送PORT命令,然后服务端通过20数据端口连接客户端开启的端口,然后发送数据:被动模式是客户

Retrofit2文件上传下载及其进度显示

序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multipart @POST("fileService") Call<User> uploadFile(@Part MultipartBody.Part file); 构造请求体上传 1 2 3 4 5 File file = new File(filePath); RequestBod

javaWeb中的文件上传下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

linux中文件上传下载

windows篇 linux文件下载到windows sz命令 登录到linux服务器使用 sz log.log 命令,弹出对话框选择下载文件的目录,点击确定即可. windows文件上传到linux rz命令 登录到linux服务器使用rz命令,弹出文件选择对话框,选择windows本地的要上传的文件,点击打开即可上传文件到linux服务器. mac篇 linux文件下载到mac 使用scp命令 scp  [email protected]:/usr/local/nginx-1.14.0.ta

28、java文件上传下载、邮件收发

文件上传下载 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data FileUpload 文件上传功能开发中比较常用,apache也提供了文件上传组件! FileUpload组件: 1. 下载源码 2. 项目中引入jar文件

最详细的文件上传下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

文件上传表单 上传文件的细节 文件上传下载和数据库结合

1 文件上传表单   1)上传文件的本质是文本复制的过程   2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写   3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如:     IE6:upfile=c:\aa\bb\a.JPG     非IE6: upfile=a.JPG   4)可以将form以MIME协议的方式将上传文件传递到服务端,服务端以二进制流的方式读写     代码:客户端form enctype="multipart/form-data&quo