- 前端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, // 最大文件大小 10MBmaxRequestSize = 10 * 1024 * 1024, // 最大請求大小 10MBfileSizeThreshold = 1 * 1024 * 1024 // 文件大小閾值 1MB
)
public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected 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注解