开发环境
设备环境: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); // 1
uploadTask.on('complete', upCompleteCallback); // 3
uploadTask.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 {
}
}