Amazon S3


SpringBootでS3にアップロード

Clientらしきもの

UploadService.java
    private AmazonS3 getAmazons3() {
        return AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
                .withRegion(region)
                .build();
    }

S3にアップロード

UploadService.java
public String putObject(MultipartFile file, String fileName) {
        try {
            InputStream inputStream = file.getInputStream();
            String path = 保存する名前ここでランダムの名前生成など
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType(file.getContentType());
            objectMetadata.setContentLength(Integer.valueOf(inputStream.available()).longValue());
            getAmazons3().putObject(bucketName, path, inputStream, objectMetadata);

アップロードしたものを特別取得URLを生成して返してくる
アップロードされたものを限定しないと、特別scriptなどのリンクが生成されてアクセスすると実行されてしまうので要注意!

UploadService.java
            GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, path)
                    .withMethod(HttpMethod.GET);

            final URL fileUrl = getAmazons3().generatePresignedUrl(generatePresignedUrlRequest);
            return fileUrl.toString();
        }catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
     }
}