2017-12-01 1 views
1

AWS S3を使用してファイルにcreatePresignedRequest()を生成しています。ユーザーが新しいウィンドウで開くリンクをクリックすると、強制的にダウンロードしたいと思っています。この機能を有効にするためにできることはありますか?私はドキュメントを見ているが、私は必要なものは見ていない。AWS S3は、preSignedRequestリンクがクリックされたときにファイルを強制ダウンロードします。

$s3 = new S3Client([ 
     'credentials'=>[ 
      'key'=>$key, 
      'secret'=>$secret, 
     ], 
     'region'=>'us-west-2', 
     'version'=>'2006-03-01', 
]); 
$cmd = $s3->getCommand('GetObject', [ 
     'Bucket' => $buckname, 
     'Key' => $file, 
]); 
$request = $s3->createPresignedRequest($cmd, '+7 days'); 
$secureUrl = (string) $request->getUri(); 
echo $secureUrl; // When the user clicks on the link - how can I force download the file instead of open in a new window. 
+0

関連:http://www.tipsandtricks-hq.com/forum/topic/force-a-file-to-download-instead-of-showing-up-in-the-browser – jarmod

答えて

1

GetObjectパラメータにResponseContentDispositionを追加すると、事前に署名されたURLを生成する際にダウンロードを強制できます。

'ResponseContentDisposition' => '<string>', 

これは、署名されたURLを使用した場合<string>の値とContent-Disposition応答ヘッダを設定するためにS3を指示します。オブジェクトは変更されません。 '<string>'に使用する

値は、これらのいずれかになります。

'attachment' 
'attachment; filename="some-filename.jpg"' 

第二の例は、ほとんどのブラウザではなくS3でその名を、指定した名前でファイルを保存します。単語attachmentの後に;の後にスペースが1つあります。

これを実行すると、S3 API Referenceに記載されている&response-content-dispositon=...が署名されたURLに含まれるようになります。

また、S3にオブジェクトをアップロードするときにContent-Dispositionを希望の値に設定することができます。これは自動的にすべてのダウンロードに表示されます。

+1

これは完全に機能しました! – LargeTuna

0

それは、コンテンツタイプのセットによって異なります。

は、ここにURLを作成するために私のコードです。もし、content-typeがブラウザが表示できるjpegまたはtxtだとすると、ブラウザに表示されます。ブラウザがコンテンツタイプを表示できない場合は、自動的にダウンロードします(exeファイルなど)。

関連する問題