S3에 업로드 된 한글 이름 파일 다운로드 설정
Ruby on Rails에서의 파일 제공
Ruby on Rails로 만든 웹 어플리케이션에서 유저들에게 파일 다운로드를 제공하고 있다. 인코딩 문제로 인해 파일 명은 영어로 해놓았는데, 한글로 변경해달라는 요청이 왔다. RoR 어플리케이션에서는 public 폴더 안에 있는 파일을 a href 태그에 달아주면, 브라우저에서 파일이라고 판단하고 다운로드를 한다. 하지만, 파일 명이 한글일 경우는 routing error가 난다.
AWS S3에서의 한글 파일 제공
S3에 파일을 올리고, public 읽기 권한을 준 후 browser 테스트를 진행했다. 그 결과, safari에서는 access deny가 반환됐다. 인코딩 문제로 보였다. 파일 명이 한글로 되어있을 경우, S3에 업로드한 파일의 URL이 인코딩 된 값으로 지정된다. 다른 브라우저에서는 이를 파악해 변환해주지만, safari에서는 작동하지 않았다.
meta tag content-disposition
여러 해결방법을 고민한 뒤, 메타태그를 이용해 해결하기로 했다. 파일 명은 영어를 사용했고, meta tag의 content-disposition을 설정해주었다.
참고: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
설정은 S3 파일의 [속성 > 메타데이터]에서 할 수 있다.
키를 Content-Disposition
로 선택하고,
값은 attachment; filename*=utf-8''<인코딩된 파일명>
으로 설정했다.
인코딩 하러 가기: http://www.convertstring.com/ko/EncodeDecode/UrlEncode (파일명 예: %ed%85%8c%ec%8a%a4%ed%8a%b8.docx)
그 결과, 경로는 영어이지만, 파일을 content-disposition에서 설정된 이름으로 다운받는 링크를 만들 수 있었다.