HarmonyOS 鸿蒙Next JS api图片上传问题

HarmonyOS 鸿蒙Next JS api图片上传问题 描述下背景:

我的需求是选择本地图片,然后上传到服务器,所用的php接口代码,在其他项目中测试可用(其他项目指app和微信小程序)

项目是Api8,用的远程真机调试是P50,用的接口是最新的文件上传接口,就是@ohos.request,改给的权限都给了ohos.permission.INTERNET还有那个http的

代码都是抄的示例代码,上传部分代码如下:

_Upfile: function (uri) {
    console.log("图片地址:" + uri);
    let file1 = {
        filename: "test",
        name: "test",
        uri: uri,
        type: "jpg"
    };
    let uploadTask;
    request.upload({
        url: getApp().data.upfile + 'upfile.php',
        files: [file1],
        header: {
            'Content-Type': 'multipart/form-data'
        },
        method: 'POST'
    }).then((data) => {
        console.log(JSON.stringify(data));
        console.log('aaa');
        uploadTask = data;
        uploadTask.on('headerReceive', function callback(headers) {
            console.info("upOnHeader headers:" + JSON.stringify(headers));
        });
        uploadTask.on('progress', function callback(uploadedSize, totalSize) {
            console.info("upload totalSize:" + totalSize + "  uploadedSize:" + uploadedSize);
        });
    }).catch((err) => {
        console.error('Failed to request the upload. Cause: ' + JSON.stringify(err));
    })
}

在一开始console打印的结果如下:

新接口的文档里是写着这种文件格式是允许的(旧接口不允许)

在then里面的两个console也是能正常打印

app Log: {"index":1,"isProgressSubscribe":false,"isHeaderReceivedSubscribe":false,"progressCallbackSet":{},"headerReceivedCallbackSet":{}

app Log: aaa

然后……就没有然后了,其他的console一个都没有出现,错误那里也没有。。。现在就是一个很尴尬的问题,不知道到底哪里出了错

完整的日志如下(我删掉了没啥用的前面时间啥的):

D 03B00/JSApp: app Log: 图片地址:dataability:///media/external/images/media/30

D 03910/Ace: PluginHandlersManager: pluginCallback is not null

D 03910/Ace: AceAbility: AceAbility is onForeground

I 03910/Ace: PluginHandlersManager: Setting handler for abilityId '2' and group 'ModuleGroup/Request'

I 03910/Ace: PluginHandlersManager: Setting handler for abilityId '2' and group 'EventGroup/Request'

I 03910/Ace: Plugin#ModuleGroup/Request: receive action message, containerId: 2, replyId: 2

D 03910/Ace: AceAbility: AceAbility is onActive

I 03910/Ace: PluginHandlersManager: reply data to js, containerId: 2, callbackId: 2

I 03B00/JSApp: app Log: GroupMessenger parse json result

D 03B00/JSApp: app Log: {"index":1,"isProgressSubscribe":false,"isHeaderReceivedSubscribe":false,"progressCallbackSet":{},"headerReceivedCallbackSet":{}

D 03B00/JSApp: app Log: aaa

D 03910/Ace: PluginHandlersManager: pluginCallback is not null

E 03910/Ace: SystemPluginLoader: group do not belong to system plugin:EventGroup/Request

I 03910/Ace: Plugin#EventGroup/Request: receive action message, containerId: 2, replyId: 3

I 03910/Ace: PluginHandlersManager: reply data to js, containerId: 2, callbackId: 3

D 03910/Ace: PluginHandlersManager: pluginCallback is not null

E 03910/Ace: SystemPluginLoader: group do not belong to system plugin:EventGroup/Request

I 03910/Ace: Plugin#EventGroup/Request: receive action message, containerId: 2, replyId: 5

I 03910/Ace: PluginHandlersManager: reply data to js, containerId: 2, callbackId: 5

I 03910/Ace: PluginHandlersManager: Reply already submitted.

这里的两个error也不知道是啥,论坛和文档里都搜不到,然后服务器那里也没有收到对应的文档

求大佬解惑


更多关于HarmonyOS 鸿蒙Next JS api图片上传问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

14 回复

开发者你好,提供下完整的代码帮你定位下。

更多关于HarmonyOS 鸿蒙Next JS api图片上传问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我先参考一下这个demo,如果不行我再把代码发上来,感谢解答,

大佬你好,我这里还是不行,已经把代码贴出来了,在4楼。。。具体是啥原因真不清楚,求解惑,谢谢,

你好,从代码中看,你写了个叫upfile的函数,需要传入uri的值。请问你是不是调用这个方法时没有将uri传入?传入的uri变量是不是局部变量?麻烦你提供一下完整代码。其次,涉及到访问文件和对文件进行增删改查的应用,在测试时不能在预览器上进行,建议使用模拟器或真机。请问你的项目兼容版本是多少?与预览器匹配吗?

希望HarmonyOS能继续加强在安全性方面的研发,保护用户的隐私和数据安全。

传入了,完整代码在上面一层哦。
是的,用了远程模拟器
都是api8的,

大佬你好,我这里还是不行,我把当前代码贴出来

```javascript
import mediaLibrary from '[@ohos](/user/ohos).multimedia.mediaLibrary';
import request from '[@ohos](/user/ohos).request';
import featureAbility from '[@ohos](/user/ohos).ability.featureAbility';

export default {
    data: {
        title: ""
    },
    onInit() {
        this.title = "Hello World";
    },
    _Choose: function () {
        let fileKeyObj = mediaLibrary.FileKey;
        let imageType = mediaLibrary.MediaType.IMAGE;
        let imagesfetchOp = {
            selections: fileKeyObj.MEDIA_TYPE + '= ?',
            selectionArgs: [imageType.toString()],
        };
        let option = {
            type: "image",
            count: 1
        };
        mediaLibrary.getMediaLibrary().startMediaSelect(option).then((value) => {
            console.log("Media resources selected." + value); // Obtain the media selection value.
            this._Upfile(value);
        }).catch((err) => {
            console.log("An error occurred when selecting media resources.");
        });
    },
    _Upfile: function (uri) {
        console.log("图片地址:" + uri);
        let file1 = {
            filename: "test",
            name: "test",
            uri: uri,
            type: "png"
        };
        let uploadTask;
        request.upload({
            url: getApp().data.upfile + 'upfile.php',
            files: [file1],
            header: 'header_http',
            method: 'POST'
        }, (err, data) => {
            if (err) {
                console.error('Failed to request the upload. Cause: ' + JSON.stringify(err));
                return;
            }
            console.log('aaa');
            console.log(JSON.stringify(data));
            uploadTask = data;
            uploadTask.on('headerReceive', function callback(headers) {
                console.info("upOnHeader headers:" + JSON.stringify(headers));
            });
            uploadTask.on('progress', (uploadedSize, totalSize) => {
                console.log(uploadedSize);
            })
        });
    }
}

当前日志是这样的

开发者您好,您的问题我们需要进一步分析,还请您通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持。

远程真机网络环境会有些问题,建议采用本地真机或本地模拟器调试网络请求。

我本地真机识别不了,我估计是windows11的问题,我研究下本地模拟器,谢谢,

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

欢迎开发小伙伴们进来帮帮楼主

针对“HarmonyOS 鸿蒙Next JS api图片上传问题”,以下提供直接相关的解决方案概述:

在HarmonyOS中处理Next JS API的图片上传问题时,首先确保你的应用已正确集成HarmonyOS的SDK,并且Next JS环境配置无误。图片上传通常涉及前端表单数据封装和后端接口接收处理。

  1. 前端处理

    • 使用HarmonyOS提供的文件选择器API让用户选择图片。
    • 获取图片的本地路径或转换为Base64编码字符串。
    • 使用Fetch API或XMLHttpRequest将图片数据通过POST请求发送到后端服务器。
  2. 后端处理

    • 后端服务器应配置相应的接口来接收图片数据。
    • 如果是Base64编码的图片,后端需解码并保存为图片文件。
    • 如果是文件流,确保服务器能正确处理并存储文件。
  3. 错误处理

    • 检查网络请求状态码,确保图片数据成功发送。
    • 在后端处理图片保存逻辑时,添加异常捕获,确保任何错误都能被记录并适当处理。
  4. 权限设置

    • 确保应用已申请并获得了存储访问权限,以便能够读取和写入图片文件。

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

回到顶部