上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)
上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)
下面是监听和上传的代码
let upProgressCallback = (uploadedSize: number, totalSize: number) => {
if(onProgress != undefined){
onProgress(uploadedSize,totalSize);
}
};
let upCompleteCallback = (taskStates: Array<request.TaskState>) => {
for (let i = 0; i < taskStates.length; i++) {
console.info("upOnComplete taskState:" + JSON.stringify(taskStates[i]));
}
};
let upFailCallback = (taskStates: Array<request.TaskState>) => {
for (let i = 0; i < taskStates.length; i++) {
LogUtil.info("upFailCallback taskState:" + JSON.stringify(taskStates[i]));
}
};
let headerCallback = (headerResponse: object) => {
LogUtil.info('headerCallback');
LogUtil.info(`Upload delete headerReceive notification. header: ${JSON.stringify(headerResponse)}`);
};
let allFiles = Array<request.File>()
let header = {
'Accept': '*/*',
'Content-Type':'multipart/form-data',
} as Record<string,string>;
let toKen = UserInfo.getInstance().accessToken;
if(toKen != '' && toKen != undefined){
let headerToken = "Bearer " + toKen ?? '';
header['Authorization'] = headerToken;
}
let data: Array<request.RequestData> = [{ name: 'zoom', value: 'zoom' },{name: "side", value: side, }];
allFiles.push({
name: "image.jpeg",
filename: "image.jpeg",
uri: `internal://cache/test.jpeg`,
type: "image/jpeg"
});
let uploadConfig: request.UploadConfig = {
url: upUrl,
header: header,
method: 'POST',
files: allFiles,
data: data,
};
try {
request.uploadFile(getContext(), uploadConfig).then((task: request.UploadTask) => {
WebUtils uploadTask = task;
WebUtils.uploadTask.on('progress', upProgressCallback);
WebUtils.uploadTask.on('complete', upCompleteCallback);
WebUtils uploadTask.on('fail', upFailCallback);
WebUtils.uploadTask.on('headerReceive',headerCallback);
}).catch((err: BusinessError) => {
console.log('发生错误');
console.error(`Failed to request the upload. Code: ${err.code}, message: ${err.message}`);
if(WebUtils uploadTask != undefined){
WebUtils uploadTask.off('progress',upProgressCallback);
WebUtils.uploadTask.off('complete',upCompleteCallback);
WebUtils uploadTask.off('fail',upFailCallback);
WebUtils.uploadTask.off('headerReceive',headerCallback);
}
if(onError != undefined && onError !=null){
onError(err)
}
});
} catch (e) {
console.log('=============== 发生错误 ==============' + JSON.stringify(e));
if(WebUtils uploadTask != undefined){
WebUtils uploadTask.off('progress',upProgressCallback);
WebUtils uploadTask.off('complete',upCompleteCallback);
WebUtils uploadTask.off('fail',upFailCallback);
WebUtils.uploadTask.off('headerReceive',headerCallback);
}
if(onError != undefined && onError !=null){
onError(e)
}
}
每次请求结果都会在 upProgressCallback
收到监听 和 upFailCallback
中收到监听。但是输出 TaskState code 0 message
是空
更多关于上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题已解决:文件的key 写错了导致上传失败。
更多关于上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,上传图片时遇到进度监听数值相同导致失败的问题,可能涉及以下几个方面:
-
网络请求配置:检查上传请求的配置,确保请求头、请求体等参数正确无误。特别是
Content-Type
和Content-Length
,确保它们与上传文件的实际类型和大小匹配。 -
上传逻辑:确认上传逻辑中是否正确处理了上传进度。鸿蒙Next中,上传进度通常通过
UploadTask
的onProgressUpdate
方法监听。确保在进度更新时,逻辑能够正确处理uploadedSize
和totalSize
的值。 -
文件处理:虽然将图片拷贝到本地没有报错,但上传时仍需确保文件路径正确,且文件未被其他进程占用或损坏。检查文件路径是否为绝对路径,并确保文件可读。
-
服务器端处理:上传失败可能与服务器端的处理逻辑有关。服务器可能在接收到上传请求后,由于某些原因(如文件大小限制、格式不支持等)拒绝了上传请求。检查服务器日志,确认是否有相关错误信息。
-
异常处理:在
fail
回调中,通常可以获取到具体的错误信息。检查错误码和错误信息,根据信息进一步排查问题。常见的错误码如401
(未授权)、403
(禁止访问)、500
(服务器内部错误)等,可以帮助定位问题。 -
日志调试:在关键步骤添加日志输出,特别是在进度监听器和
fail
回调中,记录上传的进度和错误信息,便于分析问题原因。 -
API版本兼容性:确认使用的鸿蒙API版本与当前系统版本兼容。某些API在不同版本中可能有行为差异,确保使用的API在当前版本中稳定可用。
通过以上步骤,可以逐步排查上传图片失败的原因,并针对具体问题进行修复。