Javascript 获取AWS上现有密钥的NoSuchKey错误

Javascript 获取AWS上现有密钥的NoSuchKey错误,javascript,node.js,amazon-s3,Javascript,Node.js,Amazon S3,我正在尝试在节点应用程序中使用s3.copyObject修改文件的内容处置元数据。我用它来存储文件名,我的用户浏览器应该给文件命名。这给了我一个很小的错误。但是,当我检查我的桶的仪表板时,我可以看到它们确实存在。此外,我能够使用相同的密钥上传、下载和删除文件。所以,我知道钥匙是正确的。我猜我缺少一个参数,导致它给我一个虚假的错误消息 const aws = require('aws-sdk'); const config = require('../config.js'); ... stati

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

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对象复制到自身来修改s3对象,则需要:

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

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

这非常有效!我刚刚添加了ResponseContentDisposition:“附件;filename='+调用s3.getSignedUrl的filename参数。我甚至不知道这是一个可能的参数。我希望JavaScript中的函数重载像在强类型语言中一样容易发现。