【MapSheep】
[好记性不如烂笔头]

上传压缩包

  1. 访问地址:POST:/upload

image

/**
  * 处理压缩包上传
   */
  @PostMapping("/upload")
  public Object uploadZipFile(@RequestParam("file") MultipartFile file) {
      ModelAndView mv = new ModelAndView("zipUpload");

      String path = "C:/upload/zipFiles/";

      // 检查文件是否为空
      if (file.isEmpty()) {
          mv.addObject("message", "请选择要上传的压缩包");
          return mv;
      }

      // 检查文件类型是否为压缩包
      String originalFilename = file.getOriginalFilename();
      if (!originalFilename.endsWith(".zip") && !originalFilename.endsWith(".rar")) {
          mv.addObject("message", "请上传ZIP或RAR格式的压缩包");
          return mv;
      }


      try {
          // 创建存储目录(若不存在)
          Path uploadPath = Paths.get(path);
          if (!Files.exists(uploadPath)) {
              Files.createDirectories(uploadPath);
          }

          // 保存文件到服务器
          String filePath = path + originalFilename;
          file.transferTo(new File(filePath));

          mv.addObject("message", "压缩包上传成功:" + originalFilename);
          mv.addObject("fileName", originalFilename);

      } catch (IOException e) {
          e.printStackTrace();
          mv.addObject("message", "上传失败:" + e.getMessage());
      }

      return JSON.toJSON(mv);
  }
  1. 上传路径

image

下载压缩包

  1. 访问地址 GET:/download/1234567.zip
/**
    * 下载压缩包
   */
  @GetMapping("/download/{fileName:.+}")
  public ResponseEntity<byte[]> downloadZipFile(@PathVariable String fileName) {
      // 构建文件路径
      File file = new File("C:/upload/zipFiles/" + fileName);

      // 检查文件是否存在
      if (!file.exists() || !file.isFile()) {
          return new ResponseEntity<>(HttpStatus.NOT_FOUND);
      }

      try {
          // 读取文件内容
          byte[] fileContent = Files.readAllBytes(file.toPath());

          // 处理文件名编码
          String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())
                  .replace("+", "%20");

          // 设置响应头
          HttpHeaders headers = new HttpHeaders();
          headers.add(HttpHeaders.CONTENT_DISPOSITION,
                  "attachment; filename*=UTF-8''" + encodedFileName);

          // 根据文件类型设置Content-Type
          if (fileName.endsWith(".zip")) {
              headers.add(HttpHeaders.CONTENT_TYPE, "application/zip");
          } else if (fileName.endsWith(".rar")) {
              headers.add(HttpHeaders.CONTENT_TYPE, "application/x-rar-compressed");
          }

          headers.add(HttpHeaders.CONTENT_LENGTH, String.valueOf(fileContent.length));

          return new ResponseEntity<>(fileContent, headers, HttpStatus.OK);

      } catch (IOException e) {
          e.printStackTrace();
          return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
      }
  }
  1. 下载效果

image

  • Send and Download(response.zip)
posted on 2025-08-07 10:10  (Play)  阅读(16)  评论(0)    收藏  举报