Skip to content

Instantly share code, notes, and snippets.

@samiraghayarov
Created June 13, 2022 17:46
Show Gist options
  • Save samiraghayarov/669f33147f51157e9a4f8a40aca257aa to your computer and use it in GitHub Desktop.
Save samiraghayarov/669f33147f51157e9a4f8a40aca257aa to your computer and use it in GitHub Desktop.
AWS S3 multiple file uploader
package com.clozenough.service;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.clozenough.config.AwsConfig;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
public class S3FileUploaderService {
public static final String FILE_PATH_IN_S3 = "%s/%s/%s/%s";
private final AmazonS3 s3client;
private final AwsConfig awsConfig;
public List<String> upload(List<MultipartFile> multipartFiles, Long hostId) {
List<String> uploadedFileUrls = new ArrayList<>();
AwsConfig.S3Config s3 = awsConfig.getS3();
for (MultipartFile multipartFile : multipartFiles) {
String fileName = multipartFile.getOriginalFilename();
uploadFileTos3bucket(fileName, multipartFile, hostId);
uploadedFileUrls.add(String.format(FILE_PATH_IN_S3,
s3.getUrl(),
s3.getBucketName(),
hostId,
fileName));
}
return uploadedFileUrls;
}
@SneakyThrows
private void uploadFileTos3bucket(String fileName, MultipartFile multipartFile, Long hostId) {
AwsConfig.S3Config s3 = awsConfig.getS3();
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setHeader("hostId", hostId);
s3client.putObject(new PutObjectRequest(s3.getBucketName(),
hostId + "/" + fileName,
multipartFile.getInputStream(),
objectMetadata)
.withCannedAcl(CannedAccessControlList.PublicRead));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment