无法获取AWS

问题描述 投票:0回答:3

我在使用 PutObjectCommand 和 @aws-sdk/lib-storage 使用 @aws-sdk/client-s3 库将文件上传到 S3 存储桶时遇到问题上传超过 70kbps 的文件或多或少会返回错误:

`TypeError: Failed to fetch
  at FetchHttpHandler.handle (fetch-http-handler.js:56:13)
  at PutObjectCommand.js:56:58
  at flexibleChecksumsResponseMiddleware.js:17:26
  at deserializerMiddleware.js:2:32
  at check-content-length-header.js:18:16
  at awsAuthMiddleware.js:10:26
  at async retryMiddleware.js:24:46
  at async flexibleChecksumsMiddleware.js:54:20
  at async loggerMiddleware.js:3:26
  at async Promise.all (index 0)
upload.ts:31`

但是低于该值的文件通常会

用于上传文件的函数

` 从“@aws-sdk/client-s3”导入 { PutObjectCommand, S3Client }; 从“@aws-sdk/lib-storage”导入{上传}; 从“@smithy/fetch-http-handler”导入{FetchHttpHandler};

const secretAccessKey = import.meta.env.VITE_AWS_SECRET_ACCESS_KEY;
const accessKeyId = import.meta.env.VITE_AWS_ACCESS_KEY_ID;
const region = import.meta.env.VITE_AWS_DEFAULT_REGION;
const bucket = import.meta.env.VITE_BUCKET_NAME;

const client = new S3Client({
 credentials: { secretAccessKey, accessKeyId },
 region,
 requestHandler: new FetchHttpHandler({
  requestTimeout: 5000
 })
});

export const onUploadFiles = async (file: any) => {
 const upload = new Upload({
  client,
  params: {
   Bucket: bucket,
   Key: file.name,
   Body: file.file,
   ACL: "public-read"
  },
  partSize: 5 * 1024 * 1024
 });
 try {
  upload.on("httpUploadProgress", (progress) => {
   console.log(progress);
  });

  await upload.done();
 } catch (error) {
  console.log(error);
 }
};

export const onUpload = async (file: any, callback: (data: any) => void) => {
 const input = {
  Bucket: bucket,
  Key: file.name,
  Body: file.file,
  ACL: "public-read"
 };
 try {
  const response = await client.send(new PutObjectCommand(input));
  callback(response);
 } catch (error) {
  console.log(error);
 }
};`
javascript node.js typescript aws-sdk react-tsx
3个回答
0
投票

在上传对象时尝试使用这些参数上传: 存储桶、密钥、ACL、正文、内容长度、内容类型


0
投票

这里同样的问题。我发现有一个bug: https://github.com/aws/aws-sdk-js-v3/pull/5319

对于小于一兆的文件,它可以工作。 还没想好如何解决


0
投票

我今天也遇到了同样的问题。尝试使用

client-s3
PutObjectCommand
上传任何文件(无论其大小)会导致
"TypeError: Failed to fetch"
消息。对我有帮助的是将
aws-sdk/client-s3
软件包降级到
3.317.0
版本:

npm 删除 --purge @aws-sdk/client-s3

npm 我@aws-sdk/[电子邮件受保护]

之后,上传到S3又可以了。我希望这可以帮助任何面临类似问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.