簡體   English   中英

用於下載或查看 PDF 的動態 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM