我正在尝试通过分段上传将文件从我的 React Native 应用程序上传到 S3。
如果文件超过 1 个部分(部分大小为 5MB,最后一个小于 5MB),我会收到以下错误:
“您建议上传的内容小于允许的最小大小”。
但对于小于 5mb 的文件来说效果很好。让我感到困惑的是,我使用相同的代码从网络应用程序进行多部分上传,效果很好,而且我没有收到大小错误。
我正确生成了零件,例如26mb 文件包含 6 个部分。
可能是什么问题?好像不认识最后一部分。
听起来这个问题可能与 React Native 应用程序处理文件的最后部分(小于 5MB)有关。 AWS S3 的分段上传要求除最后一个部分外的每个部分的大小至少为 5MB。以下是一些需要检查的事项:
Content-Length
标头,因为这有时会导致 AWS 识别部件尺寸时出现问题。completeMultipartUpload
来完成。以下是如何构建上传代码以正确处理最后一部分的示例:
async function uploadFile(file) {
const chunkSize = 5 * 1024 * 1024; // 5MB
const numParts = Math.ceil(file.size / chunkSize);
let partNumber = 1;
// Initialize multipart upload
const { uploadId } = await initiateMultipartUpload(file);
for (let start = 0; start < file.size; start += chunkSize) {
const end = Math.min(start + chunkSize, file.size);
const partData = file.slice(start, end);
// Upload each part
await uploadPart(uploadId, partNumber, partData);
partNumber++;
}
// Complete multipart upload
await completeMultipartUpload(uploadId);
}
async function uploadPart(uploadId, partNumber, partData) {
await s3.uploadPart({
Body: partData,
ContentLength: partData.size,
PartNumber: partNumber,
UploadId: uploadId
}).promise();
}
listParts
功能来确认每个部分是否在S3端被识别,特别是最后一个部分。