Servlet可以通过HttpServletRequest对象获取HTTP请求中的文件数据。具体步骤如下:
1、在HTML表单中,设置form的enctype属性为multipart/form-data,这样浏览器会以二进制形式编码数据,并将数据分割成多个部分,其中每个部分都包含了一个文件的一部分数据和文件的元数据。
2、使用HttpServletRequest对象获取HTTP请求,可以通过request.getInputStream()获取请求流,通过request.getHeader()获取请求头信息,通过request.getParameter()获取请求参数。
3、使用ServletFileUpload类解析HTTP请求,该类可以将multipart/form-data请求流转换为文件和参数,并将它们封装到FileItem对象中。
4、使用FileItem对象将文件写入服务器的磁盘中。
示例代码如下:
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();
// ...
} else {
// 处理文件域
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
long sizeInBytes = item.getSize();
// ...
File uploadedFile = new File("path/to/save/" + fileName);
item.write(uploadedFile);
}
}
} catch (Exception e) {
// 处理异常
}
}
}