使用Amplify.JS使用Storage.get覆盖响应标头值

时间:2019-07-02 04:39:08

标签: javascript amazon-web-services amazon-s3 content-disposition amplifyjs

我有一个S3(AWS)存储桶,用于存储mp3文件。我正在开发一个使用amplify init通过Amplify CLI初始化的应用程序,使用amplify add storage(S3)设置了S3存储,并且(create-react)应用程序是通过连接Amplify发布的通过Amplify Console进行回购。

下面介绍的方法Storage.put()Storage.get()是通过NPM安装的aws-amplify库(v1.1.29)的一部分。

使用Storage.put()时,我可以设置(或不设置)文件的Content-Type和Content-Disposition。

如果我将Content-Type设置为audio/mpeg,并且将Content-Disposition设置为“ attachment”,则可以使用Storage.get()检索预签名的URL,这将提示OS下载窗口保存该URL。文件。

如果仅将Content-Type设置为audio/mpeg,而将Content-Disposition保留为默认值(“内联”),则Storage.get()将返回一个预签名的URL,该URL将开始流式传输/播放文件在浏览器中。

这似乎是一条非此即彼的道路。

我最终想要做的是允许在UI中同时进行流式传输和/或下载,并且具有适当的行为的播放和下载按钮: image

虽然我可以通过以下方法在PUT上设置Content-Type和Content-Disposition:

用于下载

await Storage.put(fileName, file, {
  contentType: "audio/mpeg",
  contentDisposition: "attachment",
});

用于流式传输

await Storage.put(fileName, file, {
  contentType: "audio/mpeg"
});

我似乎无法弄清楚如何使用GET方法来执行此操作,以覆盖Content-Disposition。

我尝试了以下操作,并使用Content-Type将文件上传到S3:“ audio / mpeg”,没有Content-Disposition,尝试使用带签名的URL覆盖Content-Disposition以允许下载: / p>

const url = await Storage.get(fileName, {
  contentDisposition: "attachment"
});

const url = await Storage.get(fileName, {
  response-content-disposition: "attachment",   
});

但是,下载与流的行为将始终默认为S3中在文件上设置的Content-Disposition,并且不会发生覆盖。

任何对此的想法将不胜感激。

注意:我也在Amplify-JS Github repo上为此打开了一个问题,因此,如果我从那里得到任何反馈,我会将结果发布在这里。

0 个答案:

没有答案