- 前端HTML表单 (upload.html)
首先,创建一个HTML页面,允许用户选择并上传图片。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>图片上传</title>
</head>
<body>
<h2>上传图片</h2>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="myImage" accept="image/*" required>
<br><br>
<input type="submit" value="上传">
</form>
</body>
</html>
注意:表单的method设置为"post",enctype需设置成"multipart/form-data"
2. 后端Servlet (UploadServlet.java)
接下来,创建一个Servlet来处理文件上传请求,并将上传的图片保存到webapp/load目录下。
package com.example.upload;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/upload")
@MultipartConfig(
location = "${initParam.uploadPath}", // 上传文件的临时存储路径
maxFileSize = 10 * 1024 * 1024, // 最大文件大小 10MB
maxRequestSize = 10 * 1024 * 1024, // 最大请求大小 10MB
fileSizeThreshold = 1 * 1024 * 1024 // 文件大小阈值 1MB
)
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传的文件部分
Part filePart = request.getPart("myImage");
if (filePart == null) {
response.getWriter().println("没有选择文件!");
return;
}
// 获取文件名
String fileName = getFileName(filePart);
if (fileName == null || fileName.isEmpty()) {
response.getWriter().println("文件名为空!");
return;
}
// 获取webapp/load目录的实际路径
String savePath = getServletContext().getRealPath("/upload") + File.separator + fileName;
// 确保load目录存在
File loadDir = new File(getServletContext().getRealPath("/upload"));
if (!loadDir.exists()) {
loadDir.mkdirs();
}
// 保存文件
try {
filePart.write(savePath);
response.getWriter().println("文件上传成功!保存路径:" + savePath);
} catch (IOException e) {
response.getWriter().println("文件上传失败:" + e.getMessage());
}
}
// 获取上传文件的文件名
private String getFileName(Part part) {
for (String content : part.getHeader("content-disposition").split(";")) {
if (content.trim().startsWith("filename")) {
return content.substring(content.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
}
}
注意需添加@MultipartConfig注解