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
开发者你好,提供下完整的代码帮你定位下。
更多关于HarmonyOS 鸿蒙Next JS api图片上传问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,或者你参考下这个的demo https://gitee.com/openharmony/app_samples/tree/master/Network/UploadDownload
我先参考一下这个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环境配置无误。图片上传通常涉及前端表单数据封装和后端接口接收处理。
-
前端处理:
- 使用HarmonyOS提供的文件选择器API让用户选择图片。
- 获取图片的本地路径或转换为Base64编码字符串。
- 使用Fetch API或XMLHttpRequest将图片数据通过POST请求发送到后端服务器。
-
后端处理:
- 后端服务器应配置相应的接口来接收图片数据。
- 如果是Base64编码的图片,后端需解码并保存为图片文件。
- 如果是文件流,确保服务器能正确处理并存储文件。
-
错误处理:
- 检查网络请求状态码,确保图片数据成功发送。
- 在后端处理图片保存逻辑时,添加异常捕获,确保任何错误都能被记录并适当处理。
-
权限设置:
- 确保应用已申请并获得了存储访问权限,以便能够读取和写入图片文件。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,