在上传文件时,可使用AWS S3的Multipart Upload API来将文件分块上传,以确保文件可以完整上传。以下是使用AWS SDK for JavaScript进行S3部分上传的示例代码:
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const bucketName = 'example-bucket';
const keyName = 'example-file.txt';
const filePath = '/path/to/example-file.txt';
// 初始化分块上传
const initResponse = await s3.createMultipartUpload({
Bucket: bucketName,
Key: keyName
}).promise();
const uploadId = initResponse.UploadId;
// 上传分块
const partSize = 5 * 1024 * 1024; // 每个块大小(5 MB)
const fileStream = fs.createReadStream(filePath);
fileStream.on('error', function(err) {
console.log('文件读取错误:', err);
});
let partNumber = 0;
let parts = [];
fileStream.on('data', function(buffer) {
partNumber++;
const partParams = {
Body: buffer,
Bucket: bucketName,
Key: keyName,
PartNumber: partNumber,
UploadId: uploadId
};
// 上传分块,并将每个块的ETag添加到数组中
const uploadResponse = await s3.uploadPart(partParams).promise();
parts.push({
ETag: uploadResponse.ETag,
PartNumber: partNumber
});
});
// 等待所有分块上传完成
fileStream.on('end', function() {
const completeParams = {
Bucket: bucketName,
Key: keyName,
MultipartUpload: {
Parts: parts
},
UploadId: uploadId
};
// 完成分块上传
s3.completeMultipartUpload(completeParams, function(err, data) {
if (err) {
console.log('分块上传失败:', err);
} else {
console.log('分块上传成功:', data);
}
});
});
请注意,以上代码只是示例。您需要根据自己的需求调整细节,并确保文件可以完整上传。
下一篇:AWSS3文件的CORS问题