要使用Java組件commons-fileupload來實現文件上傳,可以按照以下步驟進行操作:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
...
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 檢查是否是文件上傳的表單
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// 創建文件項工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
// 創建文件上傳處理器
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 解析上傳的文件項
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
// 判斷是否是普通表單字段還是文件字段
if (item.isFormField()) {
// 處理普通表單字段
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");
// ...
} else {
// 處理文件字段
String fileName = item.getName();
InputStream fileContent = item.getInputStream();
// ...
}
}
// 文件上傳成功
response.getWriter().print("File uploaded successfully");
} catch (Exception ex) {
// 處理文件上傳失敗
response.getWriter().print("File upload failed");
}
} else {
// 非文件上傳表單
response.getWriter().print("Not a file upload form");
}
}
以上示例代碼中,當表單提交時,Servlet會檢查是否是文件上傳的表單,然后創建文件項工廠和文件上傳處理器,解析上傳的文件項。通過判斷文件項的類型,可以對普通表單字段和文件字段進行不同的處理。
注意:在實際應用中,還需要進行異常處理、文件保存等操作。