s3 메타데이터 설정하기
s3 의 파일을 브라우저에 직접 입력하면 바로 다운로드가 된다.
이유는 아무 설정하지 않은 경우 업로드 된 객체의 메타데이터 content-type 이 application/octet-stream 이기 때문이다.
이 메타데이터는 s3 객체 다운로드를 요청하면 그대로 response header 로 전달된다.
pdf 파일의 경우, 내장 pdf 뷰어를 사용하기 위해 객체 업로드 할때 또는 업로드 이후에 aws 콘솔에서 메타데이터를 조절한다.
방식 | 메타데이터 설정 | 비고 |
다운로드 우선 | Content-Type: application/pdf Content-Disposition: attachment; filename="filename.jpg" |
pdf 뷰어를 이용하기 위해 application/pdf 명시 Content-Disposition 가 우선하므로 attachment 이면 항상 다운로드된다. |
pdf 뷰어 우선 | Content-Type: application/pdf Content-Disposition: inline; filename="filename.jpg" |
s3 download response header 변경하기
객체를 다운로드 하는 시점에 response header 를 변경하고 싶다.
클라이언트 프로그램 내부적으로 변경할 수 도 있고, s3 sdk 에서 GetObjectRequest 를 만들때 변경할 수도 있다.
- 브라우저 + header 변경 프로그램 : modheader
- presigned url 만들 때 변경하는 방법
// Get an entire object, overriding the specified response headers, and print the object's content.
ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides()
.withCacheControl("No-cache")
.withContentDisposition("attachment; filename=example.txt");
GetObjectRequest getObjectRequestHeaderOverride = new GetObjectRequest(bucketName, key)
.withResponseHeaders(headerOverrides);
// 비슷한 방식으로 PresignedUrl 을 만들때도 사용 가능
GeneratePresignedUrlRequest(bucketName, key, method)
.withResponseHeaders(ResponseHeaderOverrides().withContentDisposition("attachment; filename=filename.jpg"))
.withExpiration(expiration)
한글 파일명이 깨지는 경우
브라우저별로 인코딩이 필요하다.
크롬 기준으로 utf-8 인코딩하면 해결됨
URLEncoder.encode(fileName, Charsets.UTF_8)
'트러블슈팅' 카테고리의 다른 글
[JPA] OneToMany 에서 child 를 지웠는데 update 쿼리가 날아간다고? (0) | 2020.11.05 |
---|---|
[Kotlin] Contracts (0) | 2020.08.04 |
[Gradle] 라이브러리 버전 충돌(버전이 여러개인 경우) (0) | 2020.07.14 |
[Aws] s3 cors 에러 (0) | 2020.07.03 |
[Python] pandas.read_csv 에서 ssl 오류 (0) | 2020.04.04 |