【发布时间】:2021-12-29 21:00:07
【问题描述】:
我目前在 nodeJS 应用程序中使用版本 ^2.962.0 上的aws-sdk 来连接到 Google Cloud Storage 存储桶并删除文件,但我收到“InvalidArgument: Invalid argument”错误。
obs:我目前正在从事的项目曾经使用 AWS S3,但已迁移到 GCS,因此我们现在使用Migration from AWS to GSC 解决方案。其他方法和库工作正常。
这是我使用 deleteObjects 方法的部分代码:
import { S3 } from 'aws-sdk';
const s3 = new S3({
accessKeyId: process.env.S3_ACCESS_KEY,
secretAccessKey: process.env.S3_SECRET,
endpoint: process.env.S3_ENDPOINT,
logger: console
}
const bucket = process.env.S3_BUCKET_FILES;
const folderPath = 'someFolder/';
try{
const objectsKeys: Array<any> = [];
const objectsList = await s3.listObjects( {
Bucket: bucket,
Delimiter: '/',
Prefix: folderPath
} ).promise();
objectsList.Contents.forEach( ( file ) => {
const objectKey = file.Key;
if ( objectKey === folderPath ) {
return;
}
objectsKeys.push( { Key: objectKey } );
} );
await s3.deleteObjects( { //<< There seems to be some error of argument
Bucket: bucket,
Delete: {
Objects: objectsKeys
}
} ).promise();
}
catch(err){
console.log(err)
}
我在将参数传递给 s3.deleteObjects 方法时尝试了各种配置,但我无法解决该错误:
//AWS logs and error
[AWS s3 200 0.378s 0 retries] listObjects({ Bucket: 'myBucket-files', Delimiter: '/', Prefix: 'testFolder/' })
[AWS s3 400 0.216s 0 retries] deleteObjects({
Bucket: 'myBucket-files',
Delete: {
Objects: [
{ Key: 'testFolder/e96ab708dab513e6c00ff21afbf02773' },
[length]: 1
]
}
})
InvalidArgument: Invalid argument.
at Request.extractError (C:\...) { // all the path until the error at the package folder
code: 'InvalidArgument',
region: null,
time: 2021-12-29T20:34:04.924Z,
requestId: null,
extendedRequestId: undefined,
cfId: undefined,
statusCode: 400,
retryable: false,
retryDelay: 94.12732588991155
}
是否有人知道在这种情况下提取确切参数或获取预期参数日志并交付以便可以比较它的任何方法?我已经设法将 S3 客户端实例上的记录器配置打开为documentation suggests,但在调试方面似乎并不更精确。谁能发现错误?
【问题讨论】:
-
第一句是错字吗?我不认为 AWS-sdk 能够与 GCS 交互。
-
@CollinD 不,我目前正在从事的项目曾经使用 AWS S3,但后来迁移到 GCS,所以我们现在使用Migration from AWS to GSC 解决方案。但是其他的方法都很好用,就是这种错误真的很难去调试。
-
这太棒了,今天我学会了。感谢分享!
标签: javascript node.js typescript google-cloud-storage aws-sdk-js