我在使用@AWS-SDK/CLIENT-S3库使用PutObjectCommand将文件上载到S3存储桶时遇到问题,而@AWS-SDK/lib-store上载超过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-store"导入{Upload}; 从"@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);
 }
};`

推荐答案

今天我也遇到了同样的问题.try 使用client-s3PutObjectCommand上传任何文件(无论其大小)都会导致"TypeError: Failed to fetch"消息.帮助我的是将aws-sdk/client-s3包降级到3.317.0版:

NPM删除--PURGE@AWS-SDK/CLIENT-S3

Npm i@aws-sdk/客户端-s3@3.317.0

在那之后,上传到S3再次起作用.我希望这能帮助任何面临类似问题的人.

Javascript相关问答推荐

我的JS代码将按照哪个序列被解释

如何使用3个部件之间的路由?

在JS中转换mysql UTC时间字段?

如何指定1条记录1个表?

如何使用Echart 5.5.0创建箱形图

仅圆角的甜甜圈图表

如何判断属于多个元素的属性是否具有多个值之一

单击更新页面的按钮后,页面刷新;测试/断言超时,有两个标题,但没有一个标题

没有输出到带有chrome.Devtools扩展的控制台

如何禁用附加图标点击的v—自动完成事件

在观察框架中搜索CSV数据

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

Html文件和客户端存储的相关问题,有没有可能?

我在Django中的视图中遇到多值键错误

ChartJs未呈现

react -原生向量-图标笔划宽度

在SuperBase JS客户端中寻址JSON数据

在GraphQL解析器中修改上下文值

ComponentWillReceiveProps仍在React 18.2.0中工作