所以我一直在关注其他问答;关于stackoverflow和AWS SDK的文档,但我仍然无法使用以下代码删除S3文件,它只是给出了以下错误Error TypeError: Cannot read properties of undefined (reading 'byteLength')
我的代码(s3Client.js(:
import { S3Client } from "@aws-sdk/client-s3";
const REGION = `${process.env.S3_UPLOAD_REGION}`;
const creds = {
accessKeyId: process.env.S3_UPLOAD_KEY,
secretAccessKey: process.env.S3_UPLOAD_SECRET
};
// Create an Amazon S3 service client object.
const s3Client = new S3Client({
region: REGION,
credentials: creds
});
export { s3Client };
我的下一个JS组件:
import { DeleteObjectCommand } from "@aws-sdk/client-s3";
import { s3Client } from "../lib/s3Client.js"
const bucketParams = { Bucket: "my bucket name...", Key: "my key..." };
const run = async () => {
try {
const data = await s3Client.send(new DeleteObjectCommand(bucketParams));
console.log("Success. Object deleted.", data);
return data; // For unit tests.
} catch (err) {
console.log("Error", err);
}
};
我从其他人那里了解到这似乎是一个凭证问题,但我仍然无法理解问题所在
编辑:这个问题的解决方案-
- 检查.env,这取决于您使用的是React还是NextJS,您需要有一个"REACT_PUBLIC";或";NEXT_ PUBLIC";以便经由CCD_ 2来暴露环境对象
- 在S3存储桶中检查您的权限,并设置";AllowedOrigins";以包括您的本地主机。我把我的设置为
"AllowedOrigins": "*"
,但这还不够。所以我已经包含了http://localhost:3000
,它起了作用
因此,您似乎正在为此使用密钥凭据。要调试你的问题,你应该做的第一件事是检查代码和SDK之外的凭据,并确保它们正常。
要执行此操作,请通过设置环境变量在CLI上设置凭据。
export AWS_ACCESS_KEY_ID=<Your Key here>
export AWS_SECRET_ACCESS_KEY=<SECRET HERE>
export AWS_DEFAULT_REGION=<AWS REGION>
参考:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
在此之后,运行此命令以验证凭据是否正确设置aws sts get-caller-identity
如果他们向您显示帐户和用户详细信息。然后使用CLI删除该文件。如果这样做有效,那么就可以确认问题不在凭据和代码上。如果没有,它将为您指明问题所在的正确方向。