2014-03-05 2 views
1

15 분 동안 유효한 다운로드 링크를 생성하기위한 백엔드 샘플의 일부로 다음 코드를 가지고 있습니다.사전 서명 된 Amazon S3 다운로드 URL을 얻는 모범 사례

$url = "{$bucket}/{$key}"; 
$request = $this->s3Client->get($url); 
return $this->s3Client->createPresignedUrl($request, '+15 minutes'); 

내가 알기로 이것은 아마존에 웹 요청을하고 페이지로드 당 약 20-30 개의 다운로드 링크를 생성해야합니다.

그렇다면 클라이언트가 파일을 다운로드하도록 허용하면서 Amazon API를 악용하지 않는 방법은 무엇입니까? 내가 생각할 수있는 두 가지 옵션은 다음과 같습니다.

  1. 클라이언트 쪽 (클릭 또는 페이지로드시) 링크를 생성하고 쿠키 안에 저장하면 새로 고침 할 때 추가 API 호출이 수행되지 않습니다.
  2. 서버 측 링크를 생성하고 쿠키 또는 세션에 저장합니다.

무엇 내가 관심이 있습니다 :

  1. 링크 (클라이언트 - 대 서버 측)를 생성 할 수있는 가장 좋은 방법은 무엇입니까?
  2. 링크를 어떻게 캐시해야합니까 (즉, 어디서)? PHP 용 AWS SDK에 미리 서명 된 URL을 생성하는 는 AWS에 요청을하지 않기 때문에
+0

제가 생각할 수있는 최선의 해결책은 클라이언트 측 링크를 생성하고 "onclick"이벤트를 차단하는 것입니다. 실제로 고객이 서버에서 페이지를 가져 오는 데 걸리는 시간과 고객이 페이지의 링크를 클릭하는 시간을 알 수 없으며이 솔루션은 고객이 만료 된 링크를 클릭하는 상황을 피할 수 있습니다 – morepaolo

답변

2

이것은 비 문제입니다. S3Client::getObjectUrl() 메서드는 현재 수행중인 작업을 추상화하기 때문에 사용하기가 더 쉽습니다.

+0

흥미롭게도 필자는 질문하기 전에 이것을 실제로 테스트하지 않을 것이라고 생각했다. 나는'$ request' 변수와 문서를 기반으로 요청을했다고 가정했다. 지금 테스트를 거쳐 작동합니다. 그래서 ... 굉장합니다! 감사. –

+1

요청 객체를 작성하여 요청을 작성할 수 있도록 요청 객체를 작성하지만 HTTP 요청을 수행하는 대신 URL을 반환합니다. 그것이 당신을 위해 일해 주어서 기뻐, :-) –

관련 문제