Servlet中如何实现文件上传操作呢?
文件上传是所有开发都必须面对的操作,那么Servlet如何实现一个文件上传功能?
下文将通过示例的方式一一道来,如下所示:
Servlet文件上传的示例分享
下文将通过示例的方式一一道来,如下所示:
文件上传前的准备工作: 引入jar包: commons-fileupload-1.4、commons-io-2.5.jar 可在以下网址中下载相应的jar包 http://commons.apache.org/proper/commons-fileupload/ http://commons.apache.org/proper/commons-io/ 然后将下载的jar包放入至 tomcat的bin目录 依次编写 文件上传表单页面 表单页面对应的Servlet页面例:
Servlet文件上传的示例分享
/* FilePost.html */ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Java265.com -FileUploadTest</title> </head> <body> <form method="post" action="/servlet01/UploadServletTest" enctype="multipart/form-data"> 选择文件: <input type="file" name="uploadFile" /> <br/><br/> <input type="submit" value="UploadFile" /> </form> </body> </html> /* UploadServletTest.java */ package servlet01; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.list; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet("/UploadServletTest") public class UploadServletTest extends HttpServlet { private static final long serialVersionUID = 999L; // 上传文件存储目录 private static final String UPLOAD_DIRECTORY = "uploadFile"; // 上传配置 private static final int MEMORY_THRESHOLD = 1024 * 1024 * 1; // 1MB private static final int MAX_FILE_SIZE = 1024 * 1024 * 30; // 30MB private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 40; // 40MB @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("content-type", "text/html;charset=UTF-8"); PrintWriter out = resp.getWriter(); // 检测是否为多媒体上传 if (!ServletFileUpload.isMultipartContent(req)) { // 如果不是则停止 out.println("Error: 表单类型异常 enctype=multipart/form-data"); out.flush(); return; } // 配置上传参数 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中 factory.setSizeThreshold(MEMORY_THRESHOLD); // 设置临时存储目录 factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大文件上传值 upload.setFileSizeMax(MAX_FILE_SIZE); // 设置最大请求值 (包含文件和表单数据) upload.setSizeMax(MAX_REQUEST_SIZE); // 中文处理 upload.setHeaderEncoding("UTF-8"); // 构造临时路径来存储上传的文件 // 这个路径相对当前应用的目录 String uploadPath = req.getServletContext().getRealPath("/") + File.separator + UPLOAD_DIRECTORY; // 如果目录不存在则创建 File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } try { // 解析请求的内容提取文件数据 List<FileItem> formItems = upload.parseRequest(req); if (formItems != null && formItems.size() > 0) { // 迭代表单数据 for (FileItem item : formItems) { // 处理不在表单中的字段 if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadPath + File.separator + fileName; File storeFile = new File(filePath); // 在控制台输出文件的上传路径 System.out.println(filePath); // 保存文件到硬盘 item.write(storeFile); out.println("java265.com--文件上传成功!"); } } } } catch (Exception ex) { out.println("错误信息: " + ex.getMessage()); } } }运行效果如下图所示:
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。