Загрузить файл с несколькими деталями на S3 - PullRequest
0 голосов
/ 16 февраля 2020

Я использую весеннюю загрузку, и у меня есть многочастный файл из запроса, который мне нужно загрузить на S3, но S3 поддерживает только файл (не составной файл) для загрузки на S3. Как загрузить многокомпонентный файл в s3

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете сделать следующее:

public class S3Utility{
    public static String upload(String bucket, String fileName, InputStream inputStream, String contentType, AmazonS3 s3Client, boolean isPublic) {
    if (inputStream != null) {
      try {
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentLength(inputStream.available());
        meta.setContentType(contentType);

        PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, inputStream, meta);

        if (isPublic) {
          putObjectRequest = putObjectRequest.withCannedAcl(CannedAccessControlList.PublicRead);
        }

        PutObjectResult result = S3Util.getAmazonS3Client(s3Client).putObject(putObjectRequest);
        if (result != null) {
          return fileName;
        }

      } catch (Exception e) {
        log.error("Error uploading file on S3: ", e);
      }
    } else {
      log.warn("Content InputStream is null. Not Uploading on S3");
    }
    return null;
  }
}


@RestController
 public class TestController{


   @PostMapping(path = "upload/file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> uploadStampPageImage( @RequestPart(value = "file") MultipartFile imageFile) {

        if(Objets.nonNull(file)){
          String uploadedFilePath = S3Utility.upload("myBucket","myFile.jpg",file.getInputStream(),file.getContentType(), amazonS3Client, true);
          return new ResponseEntity.ok(uploadedFilePath);
        }
        return new ResponseEntity.failure("Not uploaded");

    }

}

 }
0 голосов
/ 16 февраля 2020

Вы можете преобразовать составной файл в файл следующим образом:

private File convertMultiPartToFile(MultipartFile file) throws IOException {
    File convFile = new File(file.getOriginalFilename());
    FileOutputStream fos = new FileOutputStream(convFile);
    fos.write(file.getBytes());
    fos.close();
    return convFile;
}

Но это создаст файл в вашей системе s, вам нужно удалить его после загрузки, используя:

if(file.exists()){
  FileUtils.deleteQuietly(file);
}

Но если вы не хотите использовать этот путь, вы можете напрямую загрузить поток на s3.

PutObjectRequest(String bucketName, String key, InputStream input, ObjectMetadata metadata)

где:

input =file.getinputstream();
ObjectMetadata metadata=new ObjectMetadata();
metadata.setContentLength(file.size());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...