Created
June 13, 2022 17:46
-
-
Save samiraghayarov/669f33147f51157e9a4f8a40aca257aa to your computer and use it in GitHub Desktop.
AWS S3 multiple file uploader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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