首页 > 解决方案 > 如何使用 Spring Boot 从 S3 下载 json 文件?

问题描述

我在 S3 存储桶中有一个包含 json 文件的文件夹。我正在使用 Spring Boot。用户提供folder name特定的文件(json file)名称。

public ResponseEntity<?> downloading(String folderName, String fileName) throws IOException {
    S3Object s3Object = s3client
            .getObject(new GetObjectRequest(s3BucketName, folderName + fileName));
    if (s3Object.getKey().length() > 0) {
      //enables the user to dowload json file
      //return the object that can be dowloaded, status code 
      return new ResponseEntity<>( HttpStatus.OK);
    }
    else{
      //return error message and status code 
      return new ResponseEntity<>( HttpStatus.NOT_FOUND);
    }
   }

标签: javaspringspring-bootspring-mvc

解决方案


我已经从这里提到了答案。

所以,我只添加了一部分代码来帮助你:

public ResponseEntity<byte[]> downloading(String folderName, String fileName) {
    S3Object s3Object = s3client
            .getObject(new GetObjectRequest(s3BucketName, folderName + fileName));
    if (s3Object.getKey().length() > 0) {
      S3ObjectInputStream input = s3Object.getObjectContent();
      byte[] bytes = IOUtils.toByteArray(input);
      String file = URLEncoder.encode(s3Object.getKey(), "UTF-8").replaceAll("\\+", "%20");
      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
      headers.setContentLength(bytes.length);
      headers.setContentDispositionFormData("attachment", file);
      return new ResponseEntity<byte[]>(bytes, HttpStatus.OK);
    } 
    return new ResponseEntity<byte[]>(null, HttpStatus.NOT_FOUND);
}

谢谢。:)


推荐阅读