华为云空间云盘的断点续传API在HarmonyOS鸿蒙Next中的使用问题

华为云空间云盘的断点续传API在HarmonyOS鸿蒙Next中的使用问题 我在用node.js开发一个云盘的备份程序,现在遇到断点续传不成功的问题,程序卡在PUT文件到续传url上

我个人估计是Content-Length设置的问题,当设置为0则像文档说的,查询断点续传信息,当大于0时就一直卡死

我的步骤是:(登陆验证获取token已经完成,过程略)

  1. 先请求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

  1. 然后再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

5 回复

搞定了,是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类实现。开发者可以使用CloudFileManagerupload方法进行文件上传,并通过UploadTask对象管理上传任务。断点续传功能依赖于UploadTaskpauseresume方法,允许在上传过程中暂停并恢复上传。上传进度和状态可以通过UploadTaskonProgressonStatusChange回调进行监控。开发者需确保网络连接稳定,并在应用生命周期中妥善管理UploadTask对象,以避免任务丢失或重复上传。

在HarmonyOS鸿蒙Next中,使用华为云空间云盘的断点续传API时,需确保应用已集成华为云服务SDK,并正确配置权限。通过HwCloudFileManager类调用uploadFile方法,设置resumeUpload参数为true即可启用断点续传。注意处理网络中断、应用重启等场景,确保上传任务可恢复。建议使用onProgress回调监控上传进度,并在任务失败时调用resumeUpload方法继续上传。

回到顶部