AWS S3 - ContentType이 "application/octet-stream" 으로 고정될 때

박진형·2021년 9월 4일
0

Spring

목록 보기
5/9

문제

objectstorage(s3)에 이미지 파일을 올리려고 메타데이터를 아래와 같이 지정 해주고 업로드 했지만 업로드 하고 메타데이터를 확인하면 ContentType이 "application/octet-stream"으로 업로드 된것을 볼 수 있었다.

     ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType(multipartFile.getContentType());
            objectMetadata.setContentLength(contentLength);
 
 
 ...
 

 UploadPartRequest uploadPartRequest = new UploadPartRequest()
            .withBucketName(bucketName)
            .withKey(objectName)
            .withUploadId(uploadId)
            .withPartNumber(i)
            .withFile(file)
            .withFileOffset(fileOffset)
            .withPartSize(partSize)
            .withMetaData(objectMetadata);

원인

개인적인 추측이지만 내가 활용한 예제는 네이버 클라우드 플랫폼에서 제공하는 JAVA SDK 사용법 중 Multipart Upload 예제였다.
ref - https://guide.ncloud-docs.com/docs/storage-storage-8-1

Multipart Upload는 파트별로 전송하는 방식으로 업로드 하는 것 같다.
파트별로 업로드하는 s3.uploadPart(uploadPartRequest) 함수를 사용하면 자동으로 ContentType이 "application/octet-stream"으로 지정되는 것 같다.

해결

s3.uploadPart 함수 말고 s3.putObject 함수를 사용한다.

 InputStream inputStream = multipartFile.getInputStream();
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType(multipartFile.getContentType());
            objectMetadata.setContentLength(contentLength);
            s3.putObject(new PutObjectRequest(bucketName,objectName,inputStream,objectMetadata).withMetadata(objectMetadata));

0개의 댓글