【问题标题】:AWS s3 NoSuchKey error after retrieving file which was just uploaded检索刚刚上传的文件后的 AWS s3 NoSuchKey 错误
【发布时间】:2020-03-29 12:03:17
【问题描述】:

我将文件上传到我的 s3 存储桶并尝试在上传后立即读取文件。我大多数时候得到“err NoSuchKey:指定的密钥不存在”。我使用控制台检查存储桶,文件确实存在。

刷新页面后,即可读取文件。 Aws 区域是美国东部(弗吉尼亚北部)。 文件是通过私有读取上传的。

export function uploadFile(absolutePath: string, fileBuffer: Buffer, callback: (err, result) => void) {
    try {
            let uploadParams: awsSdk.S3.PutObjectRequest = {
                Bucket: cfg.aws[process.env.NODE_ENV].bucket,
                Key: absolutePath,
                Body: fileBuffer,
                ACL: 'private',
                CacheControl: 'public, max-age=2628000'
            }
            s3.upload(uploadParams, function (err, result) {
                if (err) {
                    Util.logError('Aws Upload File', err)
                }
                return callback(err, result)
            })
        } catch (err) {
            Util.logError('Aws Upload File', err)
            return callback(err, null)
        }
    }


    export function obtainObjectOutput(absolutePath: string, callback: (err, result: awsSdk.S3.GetObjectOutput) => void) {
        let getParaams: awsSdk.S3.GetObjectRequest = {
            Bucket: cfg.aws[process.env.NODE_ENV].bucket,
            Key: absolutePath
        }
        s3.getObject(getParaams, (error, result) => {
            (error) ? callback(error, null) : callback(null, result)
        })
    }

【问题讨论】:

  • 在您的upload 呼叫完成之前,您的getObject 呼叫是否有可能发生? PS,您应该考虑使这些函数异步,调用 SDK 调用的 .promise() 变体,并将这些承诺返回给客户端以等待履行。
  • @jarmod,是的,我意识到有可能在我的上传调用完成之前调用我的“GetObject”。这样就解决了问题

标签: amazon-web-services amazon-s3


【解决方案1】:

上传后 S3 GetObject 失败的第一个原因是 GetObject 请求实际上发生在上传完成之前,这在异步 JavaScript 中很容易做到。

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2012-05-30
    • 2011-07-29
    • 2013-11-02
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多