🙂 이미지 S3 업로드를 마무리하고 썸머노트에도 적용시켰다
1. FileManagerController.java
- 이전 포스팅에서 만든 FileManagerController의 내용을 수정해줬다
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.google.gson.JsonObject;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
@Controller
public class FileManageController {
@Autowired
private AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucketname}")
private String bucketName;
@PostMapping(value="/uploadSummernoteImageFile", produces = "application/json")
@ResponseBody
public JsonObject uploadSummernoteImageFile(@RequestParam("file") MultipartFile multipartFile) {
JsonObject jsonObject = new JsonObject();
String originalFileName = multipartFile.getOriginalFilename();
String extension = FilenameUtils.getExtension(originalFileName);
String savedFileName = UUID.randomUUID().toString() + "." + extension;
try {
// S3에 업로드
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(multipartFile.getContentType());
metadata.setContentLength(multipartFile.getSize());
amazonS3.putObject(new PutObjectRequest(bucketName, savedFileName, multipartFile.getInputStream(), metadata));
// URL 설정
String imageUrl = amazonS3.getUrl(bucketName, savedFileName).toString();
jsonObject.addProperty("url", imageUrl);
jsonObject.addProperty("responseCode", "success");
} catch (IOException e) {
jsonObject.addProperty("responseCode", "error");
e.printStackTrace();
}
return jsonObject;
}// 썸머노트 이미지 S3 저장
}
2. WebMvcConfig.java
- 접근할 외부 리소스가 필요없어졌기 때문에 WebMvcConfig.java 삭제
@Configuration
public class WebMvcConfig implements WebMvcConfigurer{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// registry.addResourceHandler("/summernoteImage/**")
// .addResourceLocations("file:///C:/workspace/project1/myImage/");
}
}
※ 선행과정
1. https://dev-tanda.tistory.com/16
[AWS S3] 이미지 업로드 - 1 (S3, IAM 생성)
🤔 스프링부트 프로젝트 중 로컬에 업로드 중이던 이미지를 AWS S3에 업로드 하려고 한다 먼저 AWS S3 버킷과 IAM 사용자를 생성해둬야 한다 1. AWS S3 버킷만들기 - AWS S3에 들어가서 [버킷만들기] 버
dev-tanda.tistory.com
2. https://dev-tanda.tistory.com/17
[AWS S3] 이미지 업로드 - 2 (SpringBoot 구현)
🥺 이전 포스팅에서 AWS S3 버킷과 IAM 사용자 생성을 마쳤다 https://dev-tanda.tistory.com/16 AWS S3 이미지 업로드 - 1 (S3, IAM 생성) 🤔 스프링부트 프로젝트 중 로컬에 업로드 중이던 이미지를 AWS S3에 업
dev-tanda.tistory.com
3. https://dev-tanda.tistory.com/20
[SpringBoot] 썸머노트(summernote) - 1 사용하기
😌 간단한 게시판 구현을 위해 썸머노트를 이용하기로 했다 1. 썸머노트 기본세팅 - CDN방식 연결 // 썸머노트 연결 // 부트스트랩, jQuery 연결 (없다면 적어줘야한다) - - - 이렇게만 세팅해두면 썸머노트가 잘 구현된
dev-tanda.tistory.com
4. https://dev-tanda.tistory.com/21
[SpringBoot] 썸머노트(summernote) - 2 이미지 저장 방식
😰 썸머노트의 자체 이미지 저장 방식은 base64를 사용하기에 서버에 다소 무리가 있다 그래서 이미지는 내 컴퓨터에 저장하면서 이름은 uuid로 새로 생성해 줄 것이다 1. pom.xml - dependency 추가 (Mave
dev-tanda.tistory.com
'개발 > SpringBoot' 카테고리의 다른 글
[SpringBoot] OAuth 로그인 - 1 사전 준비 (구글, 네이버, 카카오) (0) | 2024.02.14 |
---|---|
[SpringBoot] SpringSecurity - 2 로그인 실패 (0) | 2024.02.14 |
[SpringBoot] SpringSecurity - 1 로그인 (0) | 2024.02.13 |
[SpringBoot] 썸머노트(summernote) - 2 이미지 저장 (1) | 2024.02.13 |
[SpringBoot] 썸머노트(summernote) - 1 사용하기 (0) | 2024.02.13 |