啥也不说先上代码!!!
jar包
commons-fileupload-1.2.2.jar
commons-io-1.4.jar
jsp页面
<form action="/uploadFile" enctype="multipart/form-data" method="post">
<div>
名称:<input type="text" name="name" >
密码:<input type="text" name="pwd" >
<input type="file" name="photoname" >
<input type="submit" value="上传" />
</div>
</form>
action="/uploadFile" /uploadFile是web.xml注册的servlet
servlet代码
public class CommonUplaodFiles extends HttpServlet{
private static final String ENCODEING = "UTF-8";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html ;charset = utf-8 ");
resp.setCharacterEncoding(ENCODEING);
req.setCharacterEncoding(ENCODEING);
//自定义的文件管理类(可忽略)
FilesManagement fileManage = new FilesManagement();
fileManage.setDocid(String.valueOf(new IdWorker().nextId()));
// 判断上传表单是否为multipart/form-data类型
// 1. 用于判断jsp表单中的enctype 的属性值是不是multipart/form-data
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
// 如果不是multipart/form-data 则提醒
if (!isMultipart) {
System.out.println("提交的不是multipart/form-data");
return;
}
// 核心
// 1.创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2. 创建ServletFileUpload对象,并设置上传文件的大小限制
ServletFileUpload upload = new ServletFileUpload(factory);
// 以byte为单位 不能超过10m (1024byte = 1kb 1024kb = 1m 1024m = 1G;)
upload.setSizeMax(10 * 1024 * 1024);
upload.setHeaderEncoding(ENCODEING);
//上传监听类(不需要可忽略)
upload.setProgressListener(new ListenerUploadProgress());
List<FileItem> items = null;
try {
// 3.调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
items = upload.parseRequest(req);
} catch (FileUploadException e) {
throw new RuntimeException(e);
}
// 循环取出所有的组件 其中组件包含有 普通组件 和 上传组件
for (FileItem item : items) {
// 通过判断确定 item中的普通组件 使用的判断方法是isFormField
// 是普通的表单字段
System.out.println("item=" + item);
if (item.isFormField()) {
System.out.println("普通的表单字段");
// 获取表单中的属性
String fieldName = item.getFieldName();
// 获取表单中的属性所对应的值
String fieldValue = item.getString();
System.out.println(ChineseEncodingUtils.URLDecode(fieldName,
ENCODEING)
+ ":" + fieldValue);
}else {
System.out.println("这是上传的表单字段");
try {
// 获取字节输入流
InputStream in = item.getInputStream();
// 获取上传文件的名称
String uploadName = item.getName();
// 判断上传文件的名称是否为null,如果不为空
if (uploadName != null) {
// 文件名称 = 获取文件名称,并且包含后缀
uploadName = FilenameUtils.getName(uploadName);
}
fileManage.setPhysicalSize(FileUtils.getPhysicalSize(item
.getSize()));
fileManage.setStorageSize(item.getSize());
fileManage.setFriendName(uploadName);
System.out.println("原文件名称=" + uploadName);
String uuidName = UUID.randomUUID().toString();
String newFileName = uuidName + "."
+ FilenameUtils.getExtension(uploadName);
System.out.println("新文件名称:" + newFileName);
fileManage.setUuidName(newFileName);
//自定义的存储路径 (可根据实际自行设计)
String physicalAddress = SysPreperty.getProperty().UploadImagePath;
fileManage.setPhysicalAddress(physicalAddress);
// 根据真实的路径 进行实例化创建目录
File file = new File(physicalAddress);
// 如果目录不存在
if (!file.exists()) {
// 创建多级目录
file.mkdirs();
}
// 根据 真实目录 + "\" + 文件名称 [file.separator 的结果是 "\"]
OutputStream out = new FileOutputStream(physicalAddress
+ "/" + newFileName);
// 定义长度 初始化值为0
int len = 0;
// 定义字节缓冲区数组
byte[] b = new byte[1024];
// 循环
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
// 关闭输出流
out.close();
// 关闭输入流
in.close();
// 删除临时文件
item.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
测试结果

image.png
后台结果
item=name=null, StoreLocation=E:\Zcpt\tomcat-6.0.2\temp\upload_7de096b7_1707f6afbec__8000_00000000.tmp, size=9bytes, isFormField=true, FieldName=name
普通的表单字段
name:管理员
item=name=null, StoreLocation=E:\Zcpt\tomcat-6.0.2\temp\upload_7de096b7_1707f6afbec__8000_00000001.tmp, size=6bytes, isFormField=true, FieldName=pwd
普通的表单字段
pwd:123456
item=name=微信图片_20200211151600.jpg, StoreLocation=E:\Zcpt\tomcat-6.0.2\temp\upload_7de096b7_1707f6afbec__8000_00000002.tmp, size=526600bytes, isFormField=false, FieldName=photoname
这是上传的表单字段
原文件名称=微信图片_20200211151600.jpg
新文件名称:123fc30e-3c20-4c64-8c04-d4a25a4afad3.jpg