要使用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会检查是否是文件上传的表单,然后创建文件项工厂和文件上传处理器,解析上传的文件项。通过判断文件项的类型,可以对普通表单字段和文件字段进行不同的处理。
注意:在实际应用中,还需要进行异常处理、文件保存等操作。