如何使用aw3上传几张照片



我使用react native,后端是用PrismaGraphQL(Apollo服务器(构建的。我不将图像数据存储到Prisma,而是存储到aw3

问题是我想一次上传几个图片到我的应用程序。所以我制作了棱镜阵列[]的图像列,而不是字符串。

但由于使用aw3,我一次只能上传一张图片。因此,即使我将图像列设置为Array,也无法使用aw3将多个图像同时上传为Array。

当我搜索时,人们建议3个选项,以便通过aw3上传多个文件。

  1. 多线程
  2. 多重处理
  3. zip上传(amazon lambda(

在我的情况下(以Array上传文件(,哪种选择最可取?你能教我怎么做吗?

我的后端代码:

export const uploadToS3 = async (file, userId, folderName) => {
const { filename, createReadStream } = await file;
const readStream = createReadStream();
const objectName = `${folderName}/${userId}-${Date.now()}-${filename}`;
const { Location } = await new AWS.S3()
.upload({
Bucket: "chungchunonuploads",
Key: objectName,
ACL: "public-read",
Body: readStream,
})
.promise();
return Location;
};

我们需要用Promise.all解决多个文件上传承诺。让我们重构我们的代码,并将其拆分为2个函数。

// Assume that we have list of all files to upload
const filesToUpload = [file1, file2, file3, fileN];
export const uploadSingleFileToS3 = async (file, userId, folderName) => {
const { filename, createReadStream } = await file;
const readStream = createReadStream();
const objectName = `${folderName}/${userId}-${Date.now()}-${filename}`;
const response = await new AWS.S3().upload({
Bucket: "chungchunonuploads",
Key: objectName,
ACL: "public-read",
Body: readStream,
});
return response;
};
const uploadMultipleFilesToS3 = async (filesToUpload, userId, folderName) => {
const uploadPromises = filesToUpload.map((file) => {
return uploadSingleFileToS3(file, userId, folderName);
});
// Array containing all  uploaded files data
const uploadResult = await Promise.all(uploadPromises);
// Add logic here to update the database with  Prisma ORM
};
// Call uploadMultipleFilesToS3 with all required parameters

最新更新