华为云空间云盘的断点续传API在HarmonyOS鸿蒙Next中的使用问题
华为云空间云盘的断点续传API在HarmonyOS鸿蒙Next中的使用问题 我在用node.js开发一个云盘的备份程序,现在遇到断点续传不成功的问题,程序卡在PUT文件到续传url上
我个人估计是Content-Length设置的问题,当设置为0则像文档说的,查询断点续传信息,当大于0时就一直卡死
我的步骤是:(登陆验证获取token已经完成,过程略)
- 先请求Files:create.resume得到一个Location续传会话URI,类似 https://uploadserver-s03-drcn.cloud.dbankcloud.cn:443/upload/drive/v1/3cddef3ba36f28c5/files?uploadType=resume&uploadId=04872346232570253952
function create_upload(fileOBJ, file_length) {
let options = {
hostname: 'driveapis.cloud.huawei.com.cn',
port: 443,
path: '/upload/drive/v1/files?uploadType=resume',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': fileOBJ.length,
'X-Upload-Content-Type': 'application/octet-stream',
'X-Upload-Content-Length': file_length,
'Authorization': 'Bearer ' + ACCESS_TOKEN
}
};
return new Promise((resolve, reject) => {
let req = HTTPS.request(options, (res) => {
let _data = '';
res.on('data', (chunk) => {
_data += chunk;
});
res.on('end', function () {
let data_json = JSON.parse(_data);
if (data_json.error) { //说明有错误,显示出来
reject(data_json);
} else {
data_json.headers=res.headers;
resolve(data_json); //返回这个,用来或者续传url:location
}
});
});
req.on('error', reject);
req.write(fileOBJ);
req.end();
});
}
Files:create.resume 文档:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References/server-api-filescreateresume-0000001050151690
- 然后再PUT文件到这个URL,PUT的过程中就一直卡住,显示
Error: socket hang up
at connResetException (internal/errors.js:607:14)
at TLSSocket.socketOnEnd (_http_client.js:499:23)
at TLSSocket.emit (events.js:388:22)
at endReadableNT (internal/streams/readable.js:1336:12)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
code: 'ECONNRESET'
}
//url 是断点续传url
function upload(url, fileOBJ, file_length) {
let options = {
hostname: URL.parse(url).hostname,
port: 443,
path: URL.parse(url).path,
method: 'PUT',
headers: {
'Content-Type': 'image/jpeg',
'Content-Length': file_length,
'Content-Range': `bytes 0-${file_length-1}/${file_length}`,
'Authorization': 'Bearer ' + ACCESS_TOKEN
},
body:fileOBJ
};
return new Promise((resolve, reject) => {
let req = HTTPS.request(options, (res) => {
console.log(options);
console.log('headers:', res.statusCode);
let _data = '';
res.on('data', (chunk) => {
_data += chunk;
});
res.on('end', function () {
console.log(_data);
});
});
req.on('error', reject);
req.end();
});
}
Files:resume文档:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References/server-api-filesresume-0000001050153643
更多关于华为云空间云盘的断点续传API在HarmonyOS鸿蒙Next中的使用问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
搞定了,是Content-Range问题,
FS.readFileSync(full_path).length 和 FS.statSync(full_path).stat.size 两个是不一样的
totalFileSize等于FS.readFileSync(full_path).length,之前用了FS.statSync(full_path).stat.size
Content-Range 形式如bytes start-end/totalFileSize, 其中start为当前上传的body内容在整个文件中的开始位置end为结束位置,totalFileSize为之前调用Files.create.resume接口中申请的文件大小,end-start+1的大小应该与Content-Length相同。
更多关于华为云空间云盘的断点续传API在HarmonyOS鸿蒙Next中的使用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好的,感谢您的分享,如有其他疑问欢迎您随时发帖。
欢迎开发小伙伴们进来帮帮楼主
在HarmonyOS鸿蒙Next中,华为云空间云盘的断点续传API主要通过CloudFileManager
类实现。开发者可以使用CloudFileManager
的upload
方法进行文件上传,并通过UploadTask
对象管理上传任务。断点续传功能依赖于UploadTask
的pause
和resume
方法,允许在上传过程中暂停并恢复上传。上传进度和状态可以通过UploadTask
的onProgress
和onStatusChange
回调进行监控。开发者需确保网络连接稳定,并在应用生命周期中妥善管理UploadTask
对象,以避免任务丢失或重复上传。
在HarmonyOS鸿蒙Next中,使用华为云空间云盘的断点续传API时,需确保应用已集成华为云服务SDK,并正确配置权限。通过HwCloudFileManager
类调用uploadFile
方法,设置resumeUpload
参数为true
即可启用断点续传。注意处理网络中断、应用重启等场景,确保上传任务可恢复。建议使用onProgress
回调监控上传进度,并在任务失败时调用resumeUpload
方法继续上传。