【问题标题】:Angular - Amazon S3 - Change filename at download time from a AWS signed URLAngular - Amazon S3 - 在下载时从 AWS 签名 URL 更改文件名
【发布时间】:2020-03-05 09:54:32
【问题描述】:

我有一个 CSV 文件 (TestFile.CSV) 从 UI 上传到 S3,我想在另一个屏幕上下载相同的文件,但我必须为用户提供自定义文件名(例如,TestFile_UserName.CSV)以将其保存/下载到用户的计算机。

public downloadFile(key: any): Observable<string> {
let s3 = new AWS.S3();
let downloadUrl = s3.getSignedUrl('getObject', { Bucket: environment.bucket, Key: key });
return of(downloadUrl);}

上面的这个函数给了我签名的 URL,它会自动下载带有原始名称的文件 (TestFile.CSV)

   this.uploadDownloadService.downloadFile(key).subscribe((data) => {
    window.location.href = data;});

我正在设置 window.location.href 以便下载文件,

将文件名覆盖为其他内容然后让用户下载文件的最佳方法是什么?

感谢任何帮助/建议

【问题讨论】:

    标签: angular amazon-s3 angular-ui-router aws-sdk-js


    【解决方案1】:

    我知道您正在使用 JS,但是使用 Java s3 库,您可以在调用预签名 url 时将文件设置为具有自定义标题(下载时的文件名、文件类型)。

    【讨论】:

    • 是的,类似的东西......刚刚发现我可以使用 ResponseContentDisposition
    【解决方案2】:

    我刚刚发现我可以使用下面的“ResponseContentDisposition”的解决方案是工作(修改后的代码)代码,如果它可以帮助其他人...... https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html#API_GetObject_RequestSyntax

    public downloadFile(key: any): Observable<string> {
    
        let newFileName = 'TestFile_UserName.CSV';
        let s3 = new AWS.S3();
        let downloadUrl = s3.getSignedUrl('getObject', {
          Bucket: environment.bucket,
          Key: key,
          ResponseContentDisposition: 'attachment; filename ="' + newFileName + '"'
        });
        console.log(downloadUrl);
        return of(downloadUrl);
      }
    

    这会将文件重命名为 TestFile_UserName.CSV

    然后将签名的 URL 设置为 href

    this.uploadDownloadService.downloadFile(key).subscribe((data) => {
        window.location.href = data;});**strong text**
    

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2020-10-23
      • 2020-09-25
      • 2018-12-27
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多