结合 Spring MVC controller 接收上传文件的示例代码:
java
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.util.concurrent.CompletableFuture;@Controllerpublic class FileUploadController {private static final String UPLOAD_DIRECTORY = "uploads";@RequestMapping(value = "/upload", method = RequestMethod.POST)public @ResponseBody String handleFileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {String fileName = file.getOriginalFilename();String filePath = request.getServletContext().getRealPath("/") + "\\" + UPLOAD_DIRECTORY + "\\" + fileName;File targetFile = new File(filePath);try {file.transferTo(targetFile); // 保存上传文件} catch (IOException ex) {ex.printStackTrace();return "上传文件失败";}CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {try {unzip(targetFile); // 解压缩上传文件} catch (IOException e) {e.printStackTrace();}});future.thenRunAsync(() -> {try {storeImages(); // 存储解压后的图片} catch (IOException e) {e.printStackTrace();}});return "上传成功";}private static void unzip(File file) throws IOException {// 解压缩文件}private static void storeImages() throws IOException {// 存储解压后的图片}}
- 使用Spring MVC 提供的注解
@RequestParam
用来接收上传的压缩包文件,其中handleFileUpload
方法返回的字符串即为上传成功或失败的提示信息。 - 得到上传文件后,调用
transferTo
方法将上传的文件保存到服务器的指定文件夹中。 - 使用 CompletableFuture 同步解压和存储文件操作,使用
thenRunAsync
方法将存储操作提交到另一个新线程中执行。- 解压缩过程中,使用
unzip
方法解压缩文件 - 存储操作中,我们使用
storeImages
存储解压后的图片。
- 解压缩过程中,使用
需要注意的是,这里我们使用了两个异步操作,因此需要保证它们异步执行的顺序,确保解压缩完成后再进行存储操作。