2

S3에서 파일을 다운로드하기 위해 브라우저가 리디렉션되는 서명 된 URL을 생성하는 행 (아래)은 거의 없습니다.AWS S3 : '응답 내용 처리'를 사용하여 강제 파일 다운로드

콘텐트 유형이 옥텟 스트림으로 설정된 경우 Chrome에서 S3의 pdf 파일을 다운로드하지 않는 문제에 대해 잘 알고 있습니다.

해결 방법은 파일을 읽거나 열지 않고 파일을 다운로드하도록하는 것입니다.

URL과 함께 '응답 내용 처리'를 추가하려고 시도했지만 작동하지 않았습니다.

URL을 생성 할 때 'response-content-disposition'헤더를 사용하는 방법은 무엇입니까?

String codedFilename= EncodingUtil.urlEncode(bucketPath,'UTF-8'); 

    String stringtosign = 'GET\n\n\n'+Lexpires+'\n/'+bucketName+'/'+codedFilename; 

    String signed = make_sig(stringtosign); 

    String codedsigned = EncodingUtil.urlEncode(signed,'UTF-8'); 

    String url = serverURL+'/'+bucketName+'/'+codedFilename+'?AWSAccessKeyId='+awskey+'&Expires='+Lexpires+'&Signature='+codedsigned; 

참고 : - 이것은 salesforce-apex 구문입니다.

+0

사용자 정의 헤더 파일 자체에 설정됩니다. 이러한 헤더는 파일을 다운로드 할 때 클라이언트에 전송됩니다. 파일을 처음 업로드 할 때만이 작업을 수행 할 수 있다고 생각합니다. – datasage

+0

@datasage, S3 설명서는 PUT 요청에 'response-content-type'태그를 지정하지 않습니다. 따라서 나는 업로드 할 때 헤더를 설정할 수 없다고 생각한다. (나는 이것도 잘못 될 수있다) –

답변

3
String codedFilename= EncodingUtil.urlEncode(bucketPath,'UTF-8'); 

    String stringtosign = 'GET\n\n\n'+Lexpires+'\n/'+bucketName+'/'+codedFilename+'?response-content-disposition=attachment; filename=abc.doc'; 

    String signed = make_sig(stringtosign); 

    String codedsigned = EncodingUtil.urlEncode(signed,'UTF-8'); 

    String url = serverURL+'/'+bucketName+'/'+codedFilename+'?response-content-disposition='+EncodingUtil.urlEncode('attachment; filename=abc.doc','UTF-8')+'&AWSAccessKeyId='+awskey+'&Expires='+Lexpires+'&Signature='+codedsigned; 

출처 : Unable to override content disposition header in s3

콘텐츠 형식은 문서 (PDF의 INT이 경우)에 대한 '응용 프로그램/octet-stream을'일 경우 크롬은 문제가 있습니다. 그러나 콘텐츠 유형이 'binary/octet-stream'인 경우 크롬은 정상입니다.

고맙게도 S3 기본값 Content - 다운로드시 nothig가 설정된 경우 'binary/octet-stream'으로 다운로드 유형이 지정됩니다.

내 조언 : - 업로드 할 때 콘텐츠 유형을 모른 채 'any'유형의 파일을 S3에 필요로하는 경우 설정하거나 'binary/octet-stream'으로 설정하지 마십시오. 이렇게하면 Chrome에 경고가 표시되지만 파일이 다운로드됩니다.