gpt4 book ai didi

node.js - AWS Lambda getSignedUrl 不会为 .txt 文件创建可下载链接,但适用于 .docx

转载 作者:太空宇宙 更新时间:2023-11-03 23:57:27 26 4
gpt4 key购买 nike

我正在尝试创建一个签名 URL 以允许从 AWS S3 存储桶下载文件。对于我的 Node.JS lambda 函数,我向它传递一个文件名,它将创建一个签名 URL,然后我在客户端触发该 URL 以下载该文件。这适用于 .docx 文件,但不适用于 .txt。相反,单击时提供的签名 URL 将在浏览器/控制台中打开文件。生成签名 URL 以便使用 .txt 文件时是否需要采取不同的措施?

我已尝试解决该问题,并认为这是文件类型的差异。我最初认为这可能与影响它的文件名和转义字符有关,但我重命名了 .txt 文件并删除了它的任何特殊字符,但它仍然失败。该问题也不是由文件大小不同引起的,因为我创建了两个相同的文件(一个 .docx,另一个 .txt),并且 .docx 文件按预期下载。 .txt 文件不会。

这是我用来从 S3 存储桶下载文件的代码

//creates signed url that is returned to client side
const url = s3.getSignedUrl('getObject', {
Bucket: myBucket,
Key: myPassedInKey,
Expires: signedUrlExpireSeconds
});

responseBody = {
success: true,
url: url
};
//give the signed url and it will download it
function download(url) {
$('<iframe>', { id: 'idown', src: url }).hide().appendTo('body').click();
}

我希望该文件将文件下载到下载文件夹中,但事实并非如此。调试时,如果您在浏览器中输入签名的网址,它只会在浏览器页面上打开文件,而不是像处理 .docx 文件那样下载

编辑

我相信我的问题与下面的建议不同。我想找出为什么签名 URL 生成按预期工作于 .docx 文件而不是 .txt。

最佳答案

感谢@DevenA 和@stdunbar 帮助解决我遇到的问题。他们都正确地需要添加“内容处置” header 以强制下载而不是在浏览器中打开它。下面是我对生成签名 URL 的代码所做的更改。

var contentDisposition = 'attachment; filename=\"' + myPassedInKey + '\"';
const url = s3.getSignedUrl('getObject', {
Bucket: myBucket,
Key: myPassedInKey,
ResponseContentDisposition: contentDisposition,
Expires: signedUrlExpireSeconds
});

上面的代码现在根据需要下载 .txt

关于node.js - AWS Lambda getSignedUrl 不会为 .txt 文件创建可下载链接,但适用于 .docx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56433705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com