Skip to content

Commit c29515f

Browse files
committed
fix: S3 파일 업로드
1 parent ed3e258 commit c29515f

File tree

2 files changed

+19
-54
lines changed

2 files changed

+19
-54
lines changed

src/main/java/org/yourssu/festa/security/config/SecurityConfig.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ public JwtExceptionFilter jwtExceptionFilter() {
5252
@Bean
5353
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
5454
return http
55-
.csrf(csrf -> csrf
56-
.ignoringRequestMatchers("/h2-console/**", "/api/booths/**", "/api/auth/login")
57-
)
55+
.csrf(csrf -> csrf.disable()) // CSRF 보호 비활성화
5856
.headers(headers -> headers
5957
.frameOptions(frame -> frame.sameOrigin()) //h2/console 띄우기 위해 필요
6058
)
Lines changed: 18 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,39 @@
11
package org.yourssu.festa.service;
22

3-
import com.amazonaws.services.s3.AmazonS3Client;
4-
import com.amazonaws.services.s3.model.CannedAccessControlList;
5-
import com.amazonaws.services.s3.model.PutObjectRequest;
3+
import com.amazonaws.services.s3.AmazonS3;
4+
import com.amazonaws.services.s3.model.ObjectMetadata;
65
import lombok.RequiredArgsConstructor;
76
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.beans.factory.annotation.Value;
88
import org.springframework.stereotype.Component;
99
import org.springframework.web.multipart.MultipartFile;
10-
import org.yourssu.festa.common.code.BoothErrorCode;
11-
import org.yourssu.festa.config.AmazonConfig;
12-
import org.yourssu.festa.exception.CustomException;
13-
14-
import java.io.File;
15-
import java.io.FileOutputStream;
1610
import java.io.IOException;
1711
import java.util.*;
1812

1913
@Component
2014
@RequiredArgsConstructor
2115
@Slf4j
2216
public class AmazonS3Manager {
23-
private final AmazonS3Client amazonS3Client;
24-
private final AmazonConfig amazonConfig;
17+
private final AmazonS3 amazonS3;
2518

26-
public List<String> upload(List<MultipartFile> multipartFiles) throws IOException{
27-
List<String> uploadImageUrls = new ArrayList<>();
28-
String dirName = amazonConfig.getReviewPath();
29-
for (MultipartFile multipartFile : multipartFiles){
30-
File uploadFile = convert(multipartFile)
31-
.orElseThrow(() -> new CustomException(BoothErrorCode.BOOTH_UPLOAD_IMAGE_FAILED));
32-
String uploadImageUrl = upload(uploadFile, dirName);
33-
uploadImageUrls.add(uploadImageUrl);
34-
}
35-
return uploadImageUrls; // 업로드된 파일들의 S3 URL 주소 리스트 반환
36-
}
19+
@Value("${cloud.aws.s3.bucket}")
20+
private String bucket;
3721

38-
private String upload(File uploadFile, String dirName){
39-
String uuid = UUID.randomUUID().toString();
40-
String fileName = dirName + "/" + uuid + uploadFile.getName();
41-
String uploadImageUrl = putS3(uploadFile, fileName);
42-
removeNewFile(uploadFile); // 로컬에 생성된 File 삭제 (MultipartFile -> File 전환 하며 로컬에 파일 생성됨)
43-
return uploadImageUrl;
44-
}
22+
public List<String> upload(List<MultipartFile> multipartFiles) throws IOException {
23+
List<String> fileUrls = new ArrayList<>();
4524

46-
private String putS3(File uploadFile, String fileName) {
47-
amazonS3Client.putObject(
48-
new PutObjectRequest(amazonConfig.getBucket(), fileName, uploadFile)
49-
.withCannedAcl(CannedAccessControlList.PublicRead) // PublicRead 권한으로 업로드 됨
50-
);
51-
return amazonS3Client.getUrl(amazonConfig.getBucket(), fileName).toString();
52-
}
25+
for (MultipartFile multipartFile : multipartFiles) {
26+
String originalFilename = multipartFile.getOriginalFilename();
5327

54-
private void removeNewFile(File targetFile) {
55-
if (targetFile.delete()) {
56-
log.info("파일이 삭제되었습니다.");
57-
} else {
58-
log.info("파일이 삭제되지 못했습니다.");
59-
}
60-
}
28+
ObjectMetadata metadata = new ObjectMetadata();
29+
metadata.setContentLength(multipartFile.getSize());
30+
metadata.setContentType(multipartFile.getContentType());
6131

62-
private Optional<File> convert(MultipartFile file) throws IOException {
63-
File convertFile = new File(Objects.requireNonNull(file.getOriginalFilename()));
64-
if (convertFile.createNewFile()) {
65-
try (FileOutputStream fos = new FileOutputStream(convertFile)) {
66-
fos.write(file.getBytes());
67-
}
68-
return Optional.of(convertFile);
32+
amazonS3.putObject(bucket, originalFilename, multipartFile.getInputStream(), metadata);
33+
String fileUrl = amazonS3.getUrl(bucket, originalFilename).toString();
34+
fileUrls.add(fileUrl);
6935
}
70-
return Optional.empty();
36+
37+
return fileUrls;
7138
}
7239
}

0 commit comments

Comments
 (0)