本文主要是介绍记录 OpenHarmony 使用 request.uploadFile 时踩的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
开发环境
设备环境:OpenHarmony 4.1.x
SDK 版本:API 10
开发模型:Stage 模型
IDLE: Dev Eco 4.1
官方文档
踩坑一:后台服务地址
上传文件依赖后台服务器,如果使用本地搭建的服务,是无法访问的,还没试过修改 hosts 文件是否可以。否则就会出现如下错误
但是为了方便调试,我还是本地开了一个服务,但是我使用内网穿透工具将本地服务代理到公网,然后使用公网域名实现的调试
踩坑二:api 参数
UploadConfig 上传文件的参数错一个都不行!
里面有个本地文件上传路径,官方文档也写的比较模糊,这个路径可以通过 context.cacheDir
来获得,
let uploadConfig: request.UploadConfig = {url: url, //需要手动替换为真实服务器地址header: {'Content-Type': 'multipart/form-data',},method: http.RequestMethod.POST,files: [{filename: "biLog.zip",name: "file",uri: `internal://cache/biLog.zip`, // 这里路径必须用 cache 路径,官方文档这么要求的type: "zip"},],data: [{name: "file", value: "file"}],
};
踩坑三; 如何获取后台返回的结果
这里 鸿蒙没有直接把结果返回到 body 中,而是把结果放到了 header
中获取
try {request.uploadFile(context, uploadConfig).then((data: request.UploadTask) => {uploadTask = data;uploadTask.on('headerReceive', headerCallback); // 2 , 返回的结果会在 header 中拿到数据uploadTask.on('progress', upProgressCallback); // 1uploadTask.on('complete', upCompleteCallback); // 3uploadTask.on('fail', upFailCallback); // 3}).catch((err: BusinessError) => {console.log(TAG, `upload Failed to request the upload. Code: ${err.code}, message: ${err.message}`);if (callback) {callback("error", err);}});} catch (err) {console.log(TAG, `upload Failed to request the upload. err: ${JSON.stringify(err)}`);if (callback) {callback("error", err);}} finally {}}
这篇关于记录 OpenHarmony 使用 request.uploadFile 时踩的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!