HarmonyOS 鸿蒙Next 如何通过httpRequest.request 上传文件并添加请求参数 参考代码示例 request.uploadFile方法可上传文件但无法携带ArrayByte类型参数 貌似目前仅能携带string类型参数

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何通过httpRequest.request 上传文件并添加请求参数 参考代码示例
request.uploadFile方法可上传文件但无法携带ArrayByte类型参数 貌似目前仅能携带string类型参数 如何通过httpRequest.request 上传文件,并添加请求参数,希望给一个参考代码示例, request.uploadFile方法可以上传文件,但是无法携带ArrayByte类型的参数,貌似目前只能穿string类型的参数

2 回复
上传文件可参考demo如下:
```Arkts
uploadFile() {
    let context1 = getContext(this) as common.UIAbilityContext;
    let uploadConfig1 = {
        //需要手动替换为真实服务器地址
        url: 'http://192.168.xx.xx/system/upload/upFile2',
        header: {"Content-Type":"multipart/form-data","Authorization":""},
        method: 'POST',
        files: [
            {
                filename: 'test.jpg',
                name: 'file',
                uri: 'internal://cache/test.jpg',
                type: 'jpg'
            }
        ],
        data: [
            {
                name: 'test',
                value: '111'
            }
        ]
    }
    // 将本地应用文件上传至网络服务器
    try {
        request.uploadFile(context1, uploadConfig1)
        .then((uploadTask) => {
            uploadTask.on('complete', (taskStates) => {
                for (let i = 0; i < taskStates.length; i++) {
                    console.info(`xx upload complete taskState: ${JSON.stringify(taskStates[i])}`);
                    this.message = JSON.stringify(taskStates[i])
                }
            });
        })
        .catch((err) => {
            console.error(`xx Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);
            this.message = err.message
        })
    } catch (err) {
        console.error(`xx Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);
        this.message = err.message
    }
}

文件上传uri部分"internal://cache/"目录对应从Context中获取的应用开发路径 例如将路径参数设置如下:

let context =getContext(this) as common.UIAbilityContext
let cacheDir =context.cacheDir
let path =cacheDir+"/dest.txt"

获取到的path参数对应沙箱路径等同于"internal://cache/dest.txt"

更多关于HarmonyOS 鸿蒙Next 如何通过httpRequest.request 上传文件并添加请求参数 参考代码示例 request.uploadFile方法可上传文件但无法携带ArrayByte类型参数 貌似目前仅能携带string类型参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,若你希望通过httpRequest.request方法上传文件并同时添加请求参数,而request.uploadFile方法仅支持携带字符串类型参数,你可以考虑以下方案来实现:

你可以先将文件和其他参数(包括ArrayByte类型数据经过编码后的字符串)一起封装在FormData对象中,然后通过POST请求发送。虽然request.uploadFile方法有限制,但标准的HTTP请求库通常支持FormData,它允许你发送包含文件和表单数据的请求。

示例代码如下:

// 引入必要的模块
import fetch from '@system.fetch';

// 创建FormData对象
let formData = new FormData();

// 添加文件
formData.append('file', fileBlob, 'filename.ext');

// 将ArrayByte类型数据转换为Base64字符串或其他适合的字符串格式后添加
let arrayByteData = ...; // 你的ArrayByte数据
let encodedData = encodeArrayByteToBase64(arrayByteData); // 假设你有此转换函数
formData.append('param', encodedData);

// 发送POST请求
fetch('https://yourserver.com/upload', {
    method: 'POST',
    body: formData
}).then(response => {
    // 处理响应
}).catch(error => {
    console.error('Error:', error);
});

注意,上述代码中encodeArrayByteToBase64函数需自行实现或查找现有库,因为JavaScript原生不直接支持ArrayByte到Base64的转换。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部