![](/img/trans.png)
[英]How to facilitate downloading both CSV and PDF from API Gateway connected to S3
[英]Dynamic S3 Link for downloading or viewing a PDF
我將一些客戶 PDF 存儲在 S3 中,供多方在瀏覽器中查看或下載。 問題是我只能在 S3 中獲取一個文件,以便始終下載或始終在瀏覽器中查看。
我可以只上傳同一個文件兩次,每個文件都有自己的ContentDisposition
,但是這似乎很浪費,理想情況下它可以像添加類似?ContentDisposition=inline
的東西一樣簡單到公共桶 URL。
我的問題:如何為單個 S3 文件動態設置ContentDisposition
?
對於上下文,我當前的代碼如下所示:
$s3_object = array(
'ContentDisposition' => sprintf('attachment; filename="%s"', addslashes($basename)),
'ACL' => 'public-read',
'ContentType' => 'pdf',
'StorageClass' => 'REDUCED_REDUNDANCY',
'Bucket' => 'sample',
'Key' => static::build_file_path($path, $filename, $extension),
'Body' => $binary_content,
);
$result = $s3_client->putObject($s3_object);
此外,我確實嘗試在 SO 的其他地方搜索這個,但大多數人似乎只是在尋找一個或另一個,所以我沒有找到任何說明如何執行此操作的 SO 答案。
今天(一個多月后)我在查看其他 S3 文檔時偶然發現了這個問題的最終答案。 轉到S3 API 的 GetObject 文檔並在標有“Overriding Response Header Values”的部分下,我們發現以下內容:
注意:使用這些參數時,您必須使用授權 header 或預簽名 URL 對請求進行簽名。 它們不能用於未簽名(匿名)的請求。
- 響應內容語言
- 響應過期
- 響應緩存控制
- 響應內容處置
- 響應內容編碼
這個答案是如何動態更改 URL 中任何 S3 對象的內容配置。但是,至少對我來說,這是一個不完美的解決方案,因為我的預期用例是將 URL 作為發票存檔的一部分存儲多年,但簽名的 URL最多僅在 1 周內有效。
從技術上講,我也可以嘗試找到一種方法讓授權 header 為我工作,或者每次我想鏈接到它時查詢 S3 API 以獲得新的簽名 URL,但這對安全性、性能和 ROI 有其他影響我認為這不值得。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.