java实现多图片上传
时间: 2023-05-30 14:04:05 浏览: 87
Java 实现多图片上传可以使用以下步骤:
1. 创建一个 HTML 表单,包含一个文件选择框和一个提交按钮,如下所示:
```
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<input type="submit" value="Upload">
</form>
```
其中,`name="files[]"` 表示文件选择框可以选择多个文件。
2. 在服务器端创建一个 Servlet,来处理上传的文件。
```
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
// 获取上传的文件列表
List<Part> fileParts = request.getParts().stream().filter(part -> "files[]".equals(part.getName())).collect(Collectors.toList());
// 处理每个文件
for (Part filePart : fileParts) {
String fileName = getFileName(filePart);
InputStream fileContent = filePart.getInputStream();
// TODO: 处理上传的文件
}
// 返回成功状态
response.setStatus(HttpServletResponse.SC_OK);
} catch (IOException | ServletException e) {
// 返回错误状态
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
private String getFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] tokens = contentDisposition.split(";");
for (String token : tokens) {
if (token.trim().startsWith("filename")) {
return token.substring(token.indexOf("=") + 2, token.length() - 1);
}
}
return "";
}
}
```
其中,`@MultipartConfig` 注解表示该 Servlet 支持文件上传,`request.getParts()` 方法可以获取上传的文件列表,`getFileName()` 方法可以从文件的请求头中获取文件名。
3. 处理上传的文件
处理上传的文件可以使用以下代码:
```
String uploadDir = "/path/to/upload/dir";
String filePath = uploadDir + File.separator + fileName;
Files.copy(fileContent, Paths.get(filePath), StandardCopyOption.REPLACE_EXISTING);
```
其中,`uploadDir` 表示文件上传的目录,`filePath` 表示文件的完整路径,`Files.copy()` 方法可以将文件内容复制到指定的目录中。
完整的代码如下所示:
```
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
// 获取上传的文件列表
List<Part> fileParts = request.getParts().stream().filter(part -> "files[]".equals(part.getName())).collect(Collectors.toList());
// 处理每个文件
for (Part filePart : fileParts) {
String fileName = getFileName(filePart);
InputStream fileContent = filePart.getInputStream();
// 处理上传的文件
String uploadDir = "/path/to/upload/dir";
String filePath = uploadDir + File.separator + fileName;
Files.copy(fileContent, Paths.get(filePath), StandardCopyOption.REPLACE_EXISTING);
}
// 返回成功状态
response.setStatus(HttpServletResponse.SC_OK);
} catch (IOException | ServletException e) {
// 返回错误状态
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
private String getFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] tokens = contentDisposition.split(";");
for (String token : tokens) {
if (token.trim().startsWith("filename")) {
return token.substring(token.indexOf("=") + 2, token.length() - 1);
}
}
return "";
}
}
```
注意,上述代码只是演示了上传文件的基本流程,实际应用中需要对上传的文件进行安全检查和其他处理。
阅读全文