javascript - AWS 上现有 key 出现 NoSuchKey 错误

标签 javascript node.js amazon-s3

我尝试在 Node 应用程序中使用 s3.copyObject() 来修改文件的内容处置元数据。我用它来存储用户浏览器应该命名的文件名。它给了我一个 NoSuchKey 错误。但是,当我检查存储桶的仪表板时,我可以看到它们的 key 确实存在。此外,我能够使用相同的 key 来上传、下载和删除文件。所以,我知道 key 是正确的。我猜测我缺少一个参数,导致它给我一条虚假的错误消息。

const aws = require('aws-sdk');
const config = require('../config.js');
...

static async updateFileInS3(strStoredFileName, strNewFileName){
    const updateFileS3 = async (storedFileName, newFileName) => {
        const bucketname = config.server.storageBucket;
        const spacesEndpoint = new aws.Endpoint(config.server.storageEndpoint);
        const s3 = new aws.S3({
            endpoint: spacesEndpoint
        });

        const strKey = config.server.storageFolder + "/" + storedFileName;

        const copyparams = {
            Bucket : bucketname,
            CopySource : bucketname + "/" + storedFileName, 
            Key : strKey,
            ContentDisposition : 'attachment; filename=' + newFileName,
            MetadataDirective : 'REPLACE'
        };

        await s3.copyObject(copyparams).promise();

    }

    try {
         let awsUpdateResults = await updateFileS3(strStoredFileName, strNewFileName);
    }
    catch(err) {
        console.error(`[BucketUtil]Error updating project file for ${strStoredFileName}: ${err}`);
    }

}

预先感谢您的帮助。

最佳答案

如果您尝试通过将 s3 对象复制到自身来修改它,您需要:

 const copyparams = {
            Bucket : bucketname,
            CopySource : bucketname + "/" + strKey, // The key should be the same.
            Key : strKey,
            ContentDisposition : 'attachment; filename=' + newFileName,
            MetadataDirective : 'REPLACE'
        };

另请注意,如果您通过签名网址下载,则可以包含 ResponseContentDisposition 参数来动态设置 ContentDisposition,而不是更新元数据。

关于javascript - AWS 上现有 key 出现 NoSuchKey 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57397948/

相关文章:

javascript - Chart.js 如何在多个聊天中同步平移和缩放

node.js - NodeJS+Redis HGETALL 返回undefined

node.js - Polymer CLI 安装在 gecko 驱动程序处挂起

javascript - 如何处理同一个csv文件的同时修改?

python - 从 S3 下载大量文件

amazon-s3 - 亚马逊 S3 域托管 : CNAME too long

javascript - HTML5 下载网站为 PDF

javascript - 如何制作多模态(使用纯 css)以定位唯一 ID?

amazon-web-services - Cloudfront URL 与 AWS 上的 S3 URL

javascript - 添加 gulp 任务列表的先决条件