分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

Apache Commons FileUpload实现文件上传

发布时间:2023-09-06 02:25责任编辑:彭小芳关键词:文件上传

Commons FileUpload简介

Apache Commons是一个专注于可重用Java组件开发的 Apache 项目。Apache Commons项目由三个部分组成:

1、Commons Proper - 可重用Java组件的存储库。

2、The Commons Sandbox - 用于Java组件开发的工作区。

3、The Commons Dormant - 当前不活动的组件存储库。

Commons-FileUpload是Commons Proper中的一个组件,该组件依赖于Commons-IO ,Commons-IO也是 Commons Proper中的一个组件。

Commons FileUpload 的JAR包下载

Commons IO 的JAR包下载

前端文件上传页面

文件上传注意事项

FileUpload能解析符合HTML中基于表单的文件上载的HTTP请求 。也就是说,如果使用POST方法提交HTTP请求,并且内容类型为“multipart / form-data”,则FileUpload可以解析该请求,并使结果易于使用。

1、只能使用POST请求,GET请求只能提交普通的字符串(这是HTTP协议规定!)

2、form表单的文件控件是type="file"的input控件。

3、form标签的enctype属性是用来规定在发送表单数据之前如何对其进行编码,必须设置为:multipart/form-data。

enctype属性

enctype属性可能的值:application/x-www-form-urlencoded | multipart/form-data | text/plain。

enctype属性默认值是:application/x-www-form-urlencoded,表示普通的form表单元素提交,在发送前编码所有字符,提交的参数格式遵循:name=value&name=value&name=value...。

multipart/form-data,表示不对字符编码。直接提交二进制文件流。在使用包含文件上传控件的form表单时,必须使用该值。

text/plain,表示空格转换为 "+" 加号,但不对特殊字符编码。

index.jsp页面代码

<%@page contentType="text/html; charset=utf-8"%><!doctype html><html> ???<head> ???????<title>apache commons fileupload</title> ???</head> ???<body> ???????????????<form action="${pageContext.request.contextPath }/fileupload" method="post" enctype="multipart/form-data"> ???????????<%-- 普通的控件 --%> ???????????username<input type="text" name="username"><br> <%-- FileItem --%> ???????????<%-- 文件控件 --%> ???????????file1<input type="file" name="file1"><br> <%-- FileItem --%> ???????????file2<input type="file" name="file2"><br> <%-- FileItem --%> ???????????<input type="submit" value="submit"> ???????</form> ???????????</body></html>

后端接收文件接口

准备JAR包,添加到项目中

Servlet代码

package com.wb.controller;import java.io.File;import java.io.IOException;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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet(urlPatterns = {"/fileupload"})public class FileUpController extends HttpServlet{ ??private static final long serialVersionUID = 5351212300627874456L; ??@Override ??protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ?????????????//创建一个“硬盘文件条目工厂”对象 ??????DiskFileItemFactory factory = new DiskFileItemFactory(); ??????//设置阈值,设置JVM一次能够处理的文件大小(默认吞吐量是10KB) ??????factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD); ??????//设置临时文件的存储位置(文件大小大于吞吐量的话就必须设置这个值,比如文件大小:1GB ,一次吞吐量:1MB) ??????factory.setRepository(new File("E:\\TestFileUpload\\files")); ?????????????//创建核心对象 ??????ServletFileUpload fileUpload = new ServletFileUpload(factory); ??????//设置最大可支持的文件大小(10MB) ??????fileUpload.setFileSizeMax(1024*1024*10); ??????//设置转换时使用的字符集 ??????//fileUpload.setHeaderEncoding("UTF-8"); ?????????????if (ServletFileUpload.isMultipartContent(req)) { ??????????try { ??????????????//解析请求 ??????????????List<FileItem> fileItems = fileUpload.parseRequest(req); ??????????????for (FileItem fileItem : fileItems) { ??????????????????if(fileItem.isFormField()) {//判断该FileItem为一个普通的form元素 ??????????????????????//获取字段名 ??????????????????????String fieldName = fileItem.getFieldName(); ??????????????????????//获取字段值,并解决乱码 ??????????????????????String fieldValue = fileItem.getString("UTF-8"); ??????????????????????//String fieldValue = fileItem.getString(); ??????????????????????System.out.println(fieldName + ":" + fieldValue); ??????????????????}else {//判断该FileItem为一个文件 ??????????????????????//获取文件名 ??????????????????????String fileName = fileItem.getName(); ??????????????????????System.out.println("fileName=" + fileName); ??????????????????????//获取文件大小 ??????????????????????long fileSize = fileItem.getSize(); ??????????????????????System.out.println("fileSize=" + fileSize); ??????????????????????fileItem.write(new File("E:\\TestFileUpload\\files" + File.separator + fileName)); ??????????????????} ??????????????} ??????????} catch (FileUploadException e) { ??????????????e.printStackTrace(); ??????????} catch (Exception e) { ??????????????e.printStackTrace(); ??????????} ??????} ??}}

Apache Commons FileUpload实现文件上传

原文地址:https://www.cnblogs.com/wbxk/p/10061882.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved