如何使用aw3上传多张照片?
How to upload several photos using aw3?
我使用 react native
,后端是用 Prisma
和 GraphQL
(Apollo
服务器构建的)。
我不将图像数据存储到 Prisma,而是存储到 aw3
.
问题是我想一次将多张图片上传到我的应用程序。所以我制作 Prisma Array [] 的图像列,而不是 String.
但是由于使用aw3,我一次只能上传一张图片。因此,即使我将图像列作为数组,我也无法使用 aw3
.
一次上传多张图像作为数组
当我搜索时,人们建议使用 3 个选项以便通过 aw3 上传多个文件。
- 多线程
- 多处理
- 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
我使用 react native
,后端是用 Prisma
和 GraphQL
(Apollo
服务器构建的)。
我不将图像数据存储到 Prisma,而是存储到 aw3
.
问题是我想一次将多张图片上传到我的应用程序。所以我制作 Prisma Array [] 的图像列,而不是 String.
但是由于使用aw3,我一次只能上传一张图片。因此,即使我将图像列作为数组,我也无法使用 aw3
.
当我搜索时,人们建议使用 3 个选项以便通过 aw3 上传多个文件。
- 多线程
- 多处理
- 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