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));