文件的上传与下载
2017-03-13 22:04
197 查看
1, 文件的上传
准备jar包:commons-fileupload-1.2.2.jar commons-io-2.3.jar
Jsp中form标签的enctype=”multipart/form-data” 必须要加
upload.jsp:
Java代码:
2,文件的下载
访问Servlet即可得到要下载的文件
Java代码:
准备jar包:commons-fileupload-1.2.2.jar commons-io-2.3.jar
Jsp中form标签的enctype=”multipart/form-data” 必须要加
upload.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/uploadSrevlet2" method="post" enctype="multipart/form-data"> 上传文件介绍:<input type="text" name="fileContent" /> <br/> 上传文件 : <input type="file" name="fileTxt" /> <br/> <input type="submit" value="上传"/> </form> </body> </html>
Java代码:
package com.file.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet(name = "uploadSrevlet2", urlPatterns = { "/uploadSrevlet2" }) public class UploadSrevlet2 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // 0 判断是否支持上传 if(! ServletFileUpload.isMultipartContent(request)){ throw new RuntimeException("请先填写enctype"); } // 1 创建工厂 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); fileItemFactory.setSizeThreshold(1024 * 1024 * 2); //2M fileItemFactory.setRepository(new File(this.getServletContext().getRealPath("/temp"))); // 2 创建核心类 ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); // * 上传文件名的编码 servletFileUpload.setHeaderEncoding("UTF-8"); // 3 解析request获得上传的内容,获得所有的文件列表 List<FileItem> allFileItem = servletFileUpload.parseRequest(request); // 4 遍历 for(FileItem fileItem : allFileItem){ // 5 上传字段 和 表单字段 -- type="file"称为上传字段,其他都是表单字段(普通字段) if(fileItem.isFormField()){ // 6 普通字段 // 6.1 字段名称, <input name="" String fieldName = fileItem.getFieldName(); System.out.println("字段名称 --> " + fieldName); // 6.2 字段的内容 String fieldValue = fileItem.getString("UTF-8"); System.out.println("字段的内容 --> " + fieldValue); } else { // 7 上传字段 // 7.1 上传文件的名称 String fileName = fileItem.getName(); System.out.println("上传文件的名称 ##" + fileName); // IE : C:\Documents and Settings\lt\桌面\abc.txt // 其他: abc.txt -1+1 // * 获得上传文件的名称 fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1); // * 上传文件,文件名称重复 -- 格式: UUID32_fileName fileName = UUID.randomUUID().toString().replace("-", "") + "_" + fileName; // 7.2上传文件内容 InputStream is = fileItem.getInputStream(); // 保存 String uploadPath = this.getServletContext().getRealPath("/upload"); OutputStream out = new FileOutputStream(new File(uploadPath,fileName)); int len = -1; byte[] buf = new byte[1024]; while( (len = is.read(buf)) !=-1 ){ out.write(buf, 0, len); } out.close(); is.close(); //如果不关流,临时文件不能删除 //删除临时文件 fileItem.delete(); } } } catch (FileUploadException e) { e.printStackTrace(); } } }
2,文件的下载
访问Servlet即可得到要下载的文件
Java代码:
package com.file.servlet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name = "downloadServlet", urlPatterns = { "/downloadServlet" }) public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = "美女.jpg"; InputStream is = this.getServletContext().getResourceAsStream("/download/" + fileName); //处理中文下载文件名称,特殊 fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1"); //通过浏览器,发送的资源为下载 response.setHeader("content-disposition", "attachment;filename=" + fileName); OutputStream out = response.getOutputStream(); int len = - 1; byte[] buf = new byte[1024]; while( (len = is.read(buf)) != -1 ){ out.write(buf, 0, len); } is.close(); } }
相关文章推荐
- 解决在Windows2003Server和IIS 6.0中对于上传下载文件大小限制的问题
- 解决在Windows2003Server和IIS 6.0中对于上传下载文件大小限制的问题
- 解决在Windows 2003中无法上传超过200K文件以及无法下载超过4M的文件问题
- ASP.NET中上传下载文件
- 使用FTP命令自动完成文件的上传和下载
- 无组件实现文件上传/下载
- 文件的上传和下载
- 可否增加上传的文件的下载次数?
- 通过webservices上传下载文件
- 文件上传下载webservice
- 文件上传及下载
- java做的比较完善的FTP连接上传下载文件
- IIS6 解决下载/上传大文件的问题
- SAP ABAP/4学习---上传下载SAP SRCIPT文件
- 无组件实现文件上传/下载
- 通过WebService上传和下载文件
- VB程序员的FTP编程指南1.4-下载或上传文件
- ASP.NET中上传下载文件
- 文件上传及下载
- 通过Web Services上传和下载文件