批量文件上传 Java 实现
1. 整体流程
下面是实现批量文件上传的整体流程:
gantt
dateFormat YYYY-MM-DD
title 批量文件上传 Java 实现流程
section 1. 获取上传文件
获取上传文件 : 2023-06-01, 1d
section 2. 处理上传文件
生成文件存储路径 : 2023-06-02, 1d
保存上传文件到服务器 : 2023-06-03, 2d
section 3. 返回上传结果
返回上传结果 : 2023-06-05, 1d
2. 每一步的实现代码
2.1 获取上传文件
首先,我们需要在前端页面中添加一个文件选择框,用于选择要上传的文件。在 HTML 中,可以使用 <input type="file"> 标签来实现文件选择框。
<input type="file" id="fileInput"> <!-- 用于选择文件的文件选择框 -->
接下来,在后端 Java 代码中,我们需要接收前端传递过来的文件数据。可以使用 Java 的 Servlet 来处理文件上传请求。在 Servlet 中,可以通过 request.getPart("file") 方法来获取上传的文件。
Part filePart = request.getPart("file"); // 获取上传的文件
2.2 处理上传文件
在处理上传文件之前,我们需要生成文件在服务器中的存储路径。可以使用当前日期时间作为文件名,确保文件名的唯一性。
String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); // 生成文件名
String filePath = "/path/to/upload/directory/" + fileName; // 生成文件存储路径
然后,我们需要将上传的文件保存到服务器的指定路径中。可以使用文件流来实现文件的保存。
try (InputStream fileInputStream = filePart.getInputStream();
OutputStream fileOutputStream = new FileOutputStream(filePath)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead); // 将文件写入输出流
}
}
2.3 返回上传结果
最后,我们需要返回上传结果给前端页面,告诉用户文件是否上传成功。可以使用 JSON 格式来返回结果。
response.setContentType("application/json"); // 设置响应内容类型为 JSON
response.setCharacterEncoding("UTF-8"); // 设置响应编码为 UTF-8
JSONObject result = new JSONObject();
result.put("success", true);
result.put("message", "文件上传成功");
response.getWriter().write(result.toString()); // 将结果写入响应
3. 完整代码示例
下面是完整的 Java 代码示例:
import org.json.JSONObject;
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;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file"); // 获取上传的文件
// 生成文件存储路径
String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
String filePath = "/path/to/upload/directory/" + fileName;
// 保存上传文件到服务器
try (InputStream fileInputStream = filePart.getInputStream();
OutputStream fileOutputStream = new FileOutputStream(filePath)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead); // 将文件写入输出流
}
}
// 返回上传结果
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
JSONObject result = new JSONObject();
result.put("success", true);
result.put("message", "文件上传成功");
response.getWriter().write(result.toString());
}
}
在 HTML 页面中,使用以下代码来发送文件上传请求:
function uploadFile() {
var fileInput = document.getElementById("fileInput");
var file = fileInput.files[0];
var formData = new FormData();
formData.append("file", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/upload", true);
xhr.onreadystatechange
















