【问题解决】HarmonyOS 鸿蒙Next使用http进行post请求时,使用multiFormDataList上传文件和参数后回调显示异常
【问题解决】HarmonyOS 鸿蒙Next使用http进行post请求时,使用multiFormDataList上传文件和参数后回调显示异常
目前使用http的api进行post上传数据和文件,代码如下:
现在的代码了解如下:
其他post接口(不上传文件的接口)是可以连通并且成功返回数据的 文件路径(filePath这个)是可以正常播放的 使用fs.copyFileSync()这个api复制文件到cache文件夹时,chche文件夹中的文件大小比原文件小,并且无法正常播放 当前问题有下面几个:
multiFormDataList中,filePath这个参数是否使用的为文件路径?不是的话如何处理成合适的参数? 这个方法返回的错误为:code=2300023,message=Failed writing received data to disk/application,想问下这个错误的原因是什么?以及如何处理? 以上两个问题烦请大佬赐教,非常感谢
let httpRequest = http.createHttp();
httpRequest.request("https://www.test.com/submitData", {
method: http.RequestMethod.POST,
connectTimeout: 15000,
readTimeout: 15000,
header: {
"Content-Type": "multipart/form-data"
},
multiFormDataList: [
{
name: "type",
contentType: "",
data: "zh_CN"
},
{
name: "file",
contentType: "audio/mpeg",
filePath: "/data/storage/el2/base/haps/entry/files/type/zh_type_1.aac"
}
]
}, (err: BusinessError<void>, data: http.HttpResponse) => {
if (err) {
console.log("response",JSON.stringify(err))
return
}
console.log(<span class="hljs-string"><span class="hljs-string">"response"</span></span>,data.result.toString())
})
问题解决,详情如下:
先说结论:http的这个api功能没有问题,使用方法如上,这样使用是正常的
再说问题:出现2300023这个错误,就是文件的读写权限问题。
详细说明:
我这边的功能是:使用AVRecorder这个录音器录制音频后,将音频文件和参数上传到服务器。
我这边的问题是:创建文件时使用了fs.open打开了空白文件,然后进行了录音操作;在录音结束后,你接使用了fs.close关闭了文件,然后提交数据到服务器。因为fs.close这个api可能存在延迟,在未完全回调的时候上传了被占用的文件,因此出现文件权限的问题。
正确方式:在fs.close的回调中再进行操作,即可解决问题
在HarmonyOS中使用multiFormDataList进行POST请求上传文件及参数时遇到回调异常,可能原因包括:
- 请求格式错误:检查multiFormDataList中是否正确添加了所有必要的字段和文件,确保格式符合服务器要求。
- 网络问题:确认设备网络连接正常,且服务器地址可访问。
- 权限问题:确保应用已申请并获取了必要的网络访问权限及文件读写权限。
- 服务器响应:检查服务器是否对请求进行了正确响应,或是否有服务器端的错误。
- 异常处理:在回调中增加更详细的异常捕获和日志记录,以便分析问题。
如果问题依旧没法解决请加我微信,我的微信是itying888。