可能是因为多部分上传时使用的AWS签名不正确。您可以确保使用multipart / upload签名版本,并按照以下代码示例执行AWS签名v4请求:
var AWS = require('aws-sdk');
var fs = require('fs');
var s3 = new AWS.S3();
var bucketName = 'YOUR_BUCKET_NAME_HERE';
var keyName = 'YOUR_KEY_NAME_HERE';
var filePath = 'YOUR_FILE_PATH_HERE';
var uploadID = null;
var startMultiPartUpload = function() {
var params = {
Bucket: bucketName,
Key: keyName
};
s3.createMultipartUpload(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
uploadID = data.UploadId;
console.log('Started MultiPart upload with ID:', uploadID);
uploadParts();
}
});
};
var uploadParts = function() {
var fileSize = fs.statSync(filePath).size;
var parts = Math.ceil(fileSize / 5242880);
var partParams = {
Bucket: bucketName,
Key: keyName,
UploadId: uploadID,
Body: '',
PartNumber: 0
};
for (var i = 1; i <= parts; i++) {
partParams.PartNumber = i;
var start = (i - 1) * 5242880;
var end = i * 5242880;
if (end > fileSize) {
end = fileSize;
}
partParams.Body = fs.createReadStream(filePath, {
start: start,
end: end - 1
});
s3.uploadPart(partParams, function(multiErr, mData) {
if (multiErr) {
console.log('Error uploading part:', multiErr);
return;
}
console.log('Part uploaded:', mData);
});
}
};
startMultiPartUpload();
注意:该示例代码假定您已在计算机上配置AWS凭据。如果您尚未进行此操作,请改为使用AWS.config.loadFromPath()或AWS.config.update