js直传oss服务器在手机端如何实现大文件上传
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要在手机端实现大文件上传至OSS,可以采用分片上传的方式结合客户端直传策略。以下是关键步骤和注意事项:
环境准备:
安全授权:
分片上传实现:
// 初始化OSS实例
var client = new OSS.Wrapper({
region: '<YOUR_REGION>',
accessKeyId: '<YOUR_ACCESS_KEY_ID>',
accessKeySecret: '<YOUR_ACCESS_KEY_SECRET>',
stsToken: '<YOUR_SECURITY_TOKEN>', // 这里使用从后端获取的STS临时凭证
bucket: '<YOUR_BUCKET_NAME>'
});
// 分片上传初始化
var uploadId = await client.initiateMultipartUpload('<YOUR_OBJECT_KEY>').uploadId;
// 分片上传逻辑
var partNumber = 1;
var parts = [];
var file = document.querySelector('input[type=file]').files[0];
function uploadPart() {
var chunk = file.slice((partNumber - 1) * PART_SIZE, partNumber * PART_SIZE);
return client.multipartUpload(uploadId, '<YOUR_OBJECT_KEY>', chunk, { partNumber: partNumber++ })
.then(result => {
parts.push({ PartNumber: result.partNumber, ETag: result.etag });
if (/* 所有分片都已上传 */) {
completeUpload();
} else {
uploadPart(); // 继续上传下一个分片
}
});
}
// 完成分片上传
function completeUpload() {
client.completeMultipartUpload(uploadId, '<YOUR_OBJECT_KEY>', parts)
.then(() => console.log('Upload success'))
.catch(err => console.error('Upload error', err));
}
// 开始上传
uploadPart();
优化用户体验:
错误处理:
通过上述步骤,您可以在手机端实现大文件的安全高效上传至OSS服务器。