【发布时间】: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