我根据阿里云js sdk的demo做了一个上传功能,使用原生的file input多文件上传,第一个文件上传成功,到第二个文件上传的时候报错:
Error: The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.
at o.<anonymous> (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:4:18257)
at n (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:806)
at Generator._invoke (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:1851)
at Generator.e.(anonymous function) [as next] (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:985)
at n (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:806)
at l (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:2283)
at Generator._invoke (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:1628)
at Generator.e.(anonymous function) [as next] (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:12:985)
at a (http://gosspublic.alicdn.com/aliyun-oss-sdk-4.10.1.min.js:6:28350)
at <anonymous>
我的js功能代码:
function uploadFile(client) {
var file = document.getElementById('file').files[1];
var key = folder + file.name;
console.log(file.name + ' => ' + key);
return client.multipartUpload(key, file, {
checkpoint: checkpoint,
progress: progressFunc
}).catch(function (err) {
console.log(err);
}).then(function (res) {
console.log('upload success: %j', res);
});
}
请问有没有人知道怎么在js sdk重置这个upload id?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到您描述的错误“Error: The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.”,通常意味着尝试使用一个无效或已失效的上传ID进行分片上传操作。在连续上传多个文件时,每个文件应当初始化其独立的上传ID。从您的代码片段来看,问题可能出在未为每个文件单独初始化分片上传或是复用了首个文件的上传ID。
确保对每个上传的文件执行以下步骤:
初始化分片上传:对于每个文件,都需要调用initiateMultipartUpload
方法来获取一个新的、独立的uploadId
。这意味着您需要在循环处理每个文件之前或内部执行此操作。
async function initiateUpload(client, key) {
try {
const result = await client.initiateMultipartUpload('yourBucketName', key);
return result.uploadId; // 返回新的uploadId用于后续的分片上传
} catch (err) {
console.error('Initiate multipart upload failed:', err);
throw err;
}
}
修改上传逻辑:在您的uploadFile
函数中,应该先为当前文件调用上述的initiateUpload
函数以获取新的uploadId
,然后再进行分片上传。
async function uploadFile(client) {
var file = document.getElementById('file').files[0]; // 确保这里根据实际需求选择文件
var key = folder + file.name;
console.log(file.name + ' => ' + key);
// 初始化分片上传并获取uploadId
let uploadId = await initiateUpload(client, key);
try {
// 使用新获取的uploadId进行分片上传
const res = await client.multipartUpload(key, file, {
checkpoint: checkpoint,
progress: progressFunc,
uploadId: uploadId // 添加此参数
});
console.log('upload success: %j', res);
} catch (err) {
console.error('Upload failed:', err);
}
}
注意事项:
multipartUpload
时都携带了对应文件的新鲜uploadId
。通过以上调整,可以确保每个文件都有自己的上传流程,避免了上传ID复用导致的错误。