HarmonyOS 鸿蒙Next中request.uploadFile上传文件成功,但是并无服务器数据返回。

HarmonyOS 鸿蒙Next中request.uploadFile上传文件成功,但是并无服务器数据返回。

在使用`request.uploadFile`上传相册选中的图片时,进行了沙箱处理,上传看似也成功了,但是没有我方服务器的返回数据。

```typescript
async upFile(uri: Array<string>) {
    JLog.d("原图:::" + uri[0])
    let header = new Map<Object, string>();
    header.set('Content-Type', 'multipart/form-data');
    let segments = uri[0].split('/')
    let fileName = segments[segments.length - 1]
    let realUri = this.context.cacheDir + "/" + fileName
    JLog.d("沙箱图处理:::realUri:" + realUri)
    try {
        let file = fs.openSync(uri[0])
        fs.copyFileSync(file.fd, realUri)
    } catch (err) {
        JLog.e('err.code : ' + err.code + ', err.message : ' + err.message)
    }
    let files: Array<request.File> = [{
        filename: fileName,
        name: "file",
        uri: `internal://cache/${fileName}`,
        type: 'jpg'
    }]
    let data: Array<request.RequestData> = [{
        name: 'TenantID',
        value: 'ysz'
    }, {
        name: 'file',
        value: 'files'
    }];
    let uploadConfig: request.UploadConfig = {
        url: ApiUrl.UPLOAD_IMAGE_URL,
        header: header,
        method: 'POST',
        files: files,
        data: data
    }
    try {
        let context = getContext(this) as common.UIAbilityContext;
        request.uploadFile(context, uploadConfig)
            .then((uploadTask: request.UploadTask) => {
                uploadTask.on('complete', (taskStates: Array<request.TaskState>) => {
                    for (let i = 0; i < taskStates.length; i++) {
                        JLog.d(`upload complete taskState: ${JSON.stringify(taskStates[i])}`);
                    }
                });
                uploadTask.on("progress", (size, tot) => {
                    JLog.d("进度" + size + '/' + tot)
                })
            })
            .catch((err: BusinessError) => {
                JLog.e(`Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);
            })
    } catch (error) {
        let err: BusinessError = error as BusinessError;
        JLog.e(`Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);
    }
}

打印部分日志:
原图:::file://media/Photo/8/IMG_1715853988_003/IMG_20240516_180448.jpg
沙箱图处理:::realUri:/data/storage/el2/base/haps/entry/cache/IMG_20240516_180448.jpg
进度3647696/3647696
upload complete taskState: {"path":"/data/storage/el2/base/haps/entry/cache/IMG_20240516_180448.jpg","responseCode":0,"message":""}

更多关于HarmonyOS 鸿蒙Next中request.uploadFile上传文件成功,但是并无服务器数据返回。的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

uploadTask.on(“headerReceive”, (headers:object)

在这个方法中可以接受服务器返回的数据

[@ohos.request (上传下载)-数据文件处理-ArkTS API-Basic Services Kit(基础服务)-基础功能-系统 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5#onheaderreceive7)

on(‘headerReceive’)7+

on(type: ‘headerReceive’, callback: (header: object) => void): void

订阅上传任务HTTP标头事件,异步方法,使用callback形式返回结果。

需要权限:ohos.permission.INTERNET

系统能力: SystemCapability.MiscServices.Upload

可以参考开启on(‘headerReceive’),其中响应体的 header 和 body 都会在这个 header object 里存放

[@ohos.request (上传下载)-数据文件处理-ArkTS API-Basic Services Kit(基础服务)-基础功能-系统 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5#onheaderreceive7)

更多关于HarmonyOS 鸿蒙Next中request.uploadFile上传文件成功,但是并无服务器数据返回。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用request.uploadFile上传文件成功但无服务器数据返回,可能原因如下:

  1. 服务器未正确响应:服务器可能未返回数据或返回的数据格式不符合预期。需检查服务器端逻辑,确保正确处理上传请求并返回响应。

  2. 请求配置问题:检查request.uploadFile的配置,特别是success回调函数中是否正确处理了返回数据。确保在success回调中有处理响应的逻辑。

  3. 网络问题:网络请求可能成功,但由于网络波动或延迟,响应数据未及时返回。检查网络连接是否稳定。

  4. 跨域问题:如果服务器与客户端存在跨域问题,可能导致响应数据被浏览器拦截。确保服务器配置允许跨域请求。

  5. 接口文档问题:确认上传接口的文档,确保上传成功时服务器应返回数据。某些接口可能仅返回状态码而不返回数据。

  6. 日志记录:在服务器端和客户端添加日志记录,检查上传请求的处理过程,找出数据未返回的具体原因。

  7. 权限问题:服务器可能对上传请求有权限限制,导致数据未返回。检查服务器端的权限设置。

  8. 数据格式问题:服务器返回的数据格式可能不符合预期,导致客户端无法解析。检查返回数据的格式是否符合接口文档要求。

通过以上步骤排查,可以找到上传成功但无服务器数据返回的具体原因。

在HarmonyOS鸿蒙Next中,request.uploadFile成功上传文件但无服务器数据返回,可能原因包括:

  1. 服务器未正确响应:检查服务器端是否处理了上传请求并返回了响应。
  2. 回调函数问题:确保success回调函数正确实现,检查是否有错误处理逻辑。
  3. 网络问题:确认网络连接正常,上传过程中未中断。
  4. 文件大小或类型限制:检查服务器是否对文件大小或类型有限制。
  5. 调试信息:使用console.log或调试工具查看上传过程中的详细日志。

建议逐步排查以上问题,确保上传流程完整且服务器正确响应。

回到顶部