javaWeb中文件的上传与下载及乱码问题解决
2017-10-26 16:09
453 查看
前端代码:
文件下载的后台servlet处理
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>文件上传页面</title> </head> <body> <form action="${pageContext.request.contextPath }/servlet/UploadServlet" enctype="multipart/form-data" method="post"> 上传用户:<input type="text" name="username"><br/> 上传文件1:<input type="file" name="file1"><br/> 上传文件2:<input type="file" name="file2"><br/> <input type="submit" value="提交"> </form> </body> </html>
文件下载的后台servlet处理
package he.junhua.web.controller; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //1.得到解析器工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2.得到解析器 ServletFileUpload upload = new ServletFileUpload(factory); //3.判断上传表单的类型 < d699 span class="hljs-keyword">if (!upload.isMultipartContent(request)) { //上传表单为普通表单,则按照传统方式获取数据即可 return; } //为上传表单,则调用解析器解析上传数据 List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) { //如果是普通输入项,则得到输入项的名称和值 username="xxx" if(item.isFormField()){ String name = item.getFieldName(); String value = item.getString(); System.out.println(name+":"+value); }else{ //得到上传文件的文件名 String filename = item.getName(); filename = filename.substring(filename.lastIndexOf("\\")+1); //得到上传数据 InputStream in = item.getInputStream(); int len=0; byte buffer[] = new byte[1024]; //设置保存路径,注意安全问题,即保存路径不能被外界直接访问到 String savepath = this.getServletContext().getRealPath("/WEB-INF/upload"); //向保存路径中写入数据 FileOutputStream out = new FileOutputStream(savepath+"\\"+filename); while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } out.close(); in.close(); } } } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } /* 文件下载 文件下载时要注意文件名为中文时产生乱码的问题,在网上查询得如下解决方案: 先在页面做下判断,判断是什么浏览器,然后传一个参数到servlet,进行用不同的编码方式。 //判断当前使用浏览器版本类 var SysBrowser = function(){ this.ua = navigator.userAgent.toLowerCase(); this.browserAndVersion; this.verIE ; this.verFirefox; this.verChrome; this.verOpera; this.verSafari; this.getBrowser = function(){ (this.browserAndVersion = this.ua.match(/msie ([\d.]+)/)) ? this.verIE = parseInt(this.browserAndVersion[1],10) : (this.browserAndVersion = this.ua.match(/firefox\/([\d.]+)/)) ? this.verFirefox = this.browserAndVersion[1] : (this.browserAndVersion = this.ua.match(/chrome\/([\d.]+)/)) ? this.verChrome = this.browserAndVersion[1] : (this.browserAndVersion = this.ua.match(/opera.([\d.]+)/)) ? this.verOpera = this.browserAndVersion[1] : (this.browserAndVersion = this.ua.match(/version\/([\d.]+).*safari/)) ? this.verSafari = this.browserAndVersion[1] : 0; //以下进行测试 if (this.verIE) return "IE"+this.verIE; if (this.verFirefox) return "Firefox"; if (this.verChrome) return "Chrome"; if (this.verOpera) return "Opera"; if (this.verSafari) return "Safari"; } }; // 设置Content-Disposition String agent = request.getHeader("user-agent"); System.out.println(agent); if (agent.contains("MSIE")) { // IE浏览器 --- URL编码 filename = URLEncoder.encode(filename, "utf-8"); } else if (agent.contains("Firefox")) { // 火狐浏览器 --- Base64编码 filename = base64EncodeFileName(filename); } else { filename = URLEncoder.encode(filename, "utf-8"); } */ package he.junhua.web.controller; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = this.getServletContext().getRealPath("/WEB-INF/upload/花菇.txt"); String filename = path.substring(path.lastIndexOf("\\")+1); // response.setHeader("content-disposition", "attachment;filename="+filename); response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"utf-8")); InputStream in = null; OutputStream out = null; try { in = new FileInputStream(path); int len = 0; byte buffer[] = new byte[1024]; out = response.getOutputStream(); while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } finally { if (in != null) { try { in.close(); } catch (Exception e) { e.printStackTrace(); } } if (out != null) { try { out.close(); } catch (Exception e) { e.printStackTrace(); } } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
相关文章推荐
- javaWeb中文件的上传与下载及乱码问题解决
- jm解决乱码问题-参数化-数据库操作-文件上传下载
- FTPClient上传和下载文件,中文乱码问题解决
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- commons-FileUpload文件上传下载,及中文乱码、IE7路径错误问题解决
- 解决javaWEB 下载文件中文名称乱码问题
- 真正解决jspSmartUpload组件上传下载文件时中文乱码问题!!!
- java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题
- Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
- struts2解决文件上传下载中文乱码问题
- tomcat下部署javaweb项目,解决http下载rar文件,乱码问题
- 文件上传下载解决乱码问题
- struts2文件上传下载及乱码问题解决
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- Struts2-文件上传下载-解决下载中文乱码问题
- 使用FPT上传下载文件和解决中文名文件乱码问题
- 解决在Windows2003Server和IIS 6.0中对于上传下载文件大小限制的问题
- jsp实现上传和下载 解决smartupload中文乱码问题
- Flex+Java组合解决汉字或特殊符号(如&等)文件下载时的文件名乱码问题
- 文件下载(解决中文文件名下载乱码问题) 收集