얼마전 s3 에 업로드된 상당량의 이미지 mime-type 이 octet-stream 으로 올라가 있는 것을 확인했다. 또 그 파일들은 모두 확장자가 대문자인 것도 확인했다.
String mimeType = Files.probeContentType(path);
위 부분에서 대문자 확장자 파일들에 대한 처리가 정상적으로 되지 않아 null 을 반환한 것이 문제였다. 확장자로 mimeType 을 얻어오는 과정에서 발생할 예외들을 미리 예상하여 처리할 수도 있지만, 업로드시 파일에서 직접 mimeType 을 확인할 수도 있다. Apache 의 Tika 라이브러리를 사용해 봤다.
compile group: 'org.apache.tika', name: 'tika-core', version: '1.24'
...
String mimeType = new Tika().detect(inputStream);
tika-parsers 는 용량이 어마무시하다. parser 가 꼭 필요한게 아니라면 core 만 받자.
그리고 기존에 s3 에 octet-stream 타입으로 업로드된 이미지 파일들은 aws-cli 로 배치처리 하여 image/jpeg 으로 변경하였다.
> aws s3 cp \
s3://bucket/path \
s3://bucket/path \
--exclude "*" \
--include "*.JPG" \
--acl public-read \
--no-guess-mime-type \
--content-type "image/jpeg" \
--metadata-directive "REPLACE" \
--recursive
--profile myprofile
아쉽게도 include 에 지정한 패턴이 대소문자를 구분하지 못해서 시간이 꽤 걸렸음...
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.