我在 S3 中有 PDF、图像和文本文件。我希望能够创建文件的下载链接,但只是有时。有时我的用户想要在网络上查看文件,但有时他们想要单击“下载”按钮一步即可获取它们(而不是打开它们并单击 PDF 查看器中的磁盘图标或按 CTRL + S 等)。 )。对于后一种情况,我希望能够生成一个链接来告诉 S3 要做什么。如果我还可以控制附件的名称,那就太好了,但我会非常高兴能够创建附件。
脚注
我知道您可以提前将此类 header 添加到您的文件中,但这使我无法在事后选择“下载”或“在线查看”。
最佳答案
您可以dynamically add headers to response基于 URL,通过传递额外参数 response-content-disposition=attachment; filename='mycustomFileName'
如 s3 Get Obejct docs 中所述.
但是,这只适用于 authenticated (time limited) URLS ,否则,用户将收到类似于以下内容的 InvalidRequest
错误:
<Error>
<Code>InvalidRequest</Code>
<Message>
Request specific response headers cannot be used for anonymous GET requests.
</Message>
<RequestId>C5066C8E8F647EA2</RequestId>
<HostId>
ik5oj4QfcJX+5+F/PdootFuq47bh6hLpDqhbeyWlw+AADvMPpOPio6eYwXW7Fnx+H/zpVBM7DbA=
</HostId>
</Error>
如果您希望此功能适用于未经身份验证的用户,download tag可能是一个选择。正如 this example 中所述,您可以指定用户友好的文件名而不是哈希值:
<a href="/images/490/736d910771bc3ee2.jpeg" download="some_nice_image_name.jpg">
尽管这显然有助于抓取工具自动注释您的内容。
关于file - 我可以创建一个带有内容处置 : attachment? 的一次性 S3 链接吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51922601/