关于HarmonyOS 鸿蒙Next ets,api8的文件上传问题

关于HarmonyOS 鸿蒙Next ets,api8的文件上传问题 我先描述一下当前的情况:

项目是基于ets,api8开发的,有一个文件上传的需求,使用mediaLibrary.getMediaLibrary().startMediaSelect获取到了图片,再使用request.upload进行上传。

然后虽然前端日志显示,上传已经到了uploadTask这一步,执行了

console.info("upload totalSize:" + totalSize + "  uploadedSize:" + uploadedSize);

按理说,前端的文件上传是成功了,但是在后端php代码中,我执行了empty($_FILES),发现这段代码被触发了,即在后端这里,前端没有东西被传过来。

我在php代码中修改了一下,打印var_dump($_REQUEST);仍然是空,那说明后端是肯定没接收到请求的。

(这里说明一下,这个接口地址肯定没问题,因为如果有问题的话,那么后端都不会去打印出空的结果日志,并且项目中其他数据请求等也是走这个目录下的其他php接口,都没有问题,即使我php后面接受文件保存到本地等等代码写错,但是至少一开始打印就不可能为空)

接下来我仔细研读了一下文档,发现问题可能出在图片地址上,因为文档里的地址是internal://cache/xxx.png这种格式,带后缀的,但是我通过mediaLibrary拿到的地址是dataability最后跟数字的这种格式,当然我拿到的地址,可以直接在image里显示出我选择的图片。于是我在文档和论坛里搜索了一下,发现没有通过ets进行两个地址转换的代码,只有java版本的。

我记得之前发工单问的时候,客服跟我说,可以把图片放到resources/base/rawfile文件夹下,但是api8中在base下创建rawfile文件夹会报错,我就放到了resources/rawfile文件夹中,然后将文件的uri地址直接改成internal的格式进行测试,发现后端没有打印信息(说明没有去请求接口),前端没有报错,也没有执行到uploadTask这一步,但同时也没有到err的部分,即,啥都没……

到这时候我开始怀疑,是不是我header设置的问题。

于是我把header改成了

let header = {
  "Content-Type": 'multipart/form-data',
  "Connection": "keep-alive",
  "Content-Encoding":"gzip"
};

把两种文件地址格式,都拿来测试了一遍,依然不行。

目前是努力尝试到了这一步

==========================================

我这里再强调一下

权限给了,http的网络开了,用的真机(mate30pro),wifi

然后官方gitee上,上传下载的demo,没用,根本无法演示,他那个接口地址好像停用了

==========================================

然后我又发现了一个问题,那就是,最新的request.upload,只能通过size这个,来判断是否上传成功

但是如果后端在上传完毕后,还要给前端返回一点东西的话,就接收不到了

悬赏积分求人解决这个问题

当然,如果有人能提供ets api8下,选择文件上传的,前端+后端php代码,测试成功后,支付宝100悬赏


更多关于关于HarmonyOS 鸿蒙Next ets,api8的文件上传问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

更多关于关于HarmonyOS 鸿蒙Next ets,api8的文件上传问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


想问下博主,Request.upload 这个上传文件的接口我也是按照官方案例写的,然后又根据论坛别人发的帖子修改代码,但是后端一直没反应,后端用的是python写的,一直接收不到文件数据。所以想问下博主有没有成功的案例想参考下,可以是前端加后端一整套流程的案例。非常感谢博主!

关于HarmonyOS 鸿蒙Next ets,api8的文件上传问题,以下是一些直接相关的解答:

在HarmonyOS api8版本中,文件上传通常涉及文件系统访问权限以及网络请求处理。首先,确保你的应用已经声明了必要的权限,包括读写存储权限以及网络权限。这些权限通常在应用的manifest文件中配置。

文件上传的核心步骤包括:

  1. 选择文件:通过文件选择器让用户选择需要上传的文件。
  2. 读取文件:利用HarmonyOS的文件系统API读取用户选择的文件内容。
  3. 构建请求:根据文件内容构建HTTP请求,通常包括文件数据、文件名、MIME类型等信息。
  4. 发送请求:使用HarmonyOS的网络API发送HTTP请求到服务器。
  5. 处理响应:接收并处理服务器的响应,确认文件是否上传成功。

请注意,文件上传过程中可能遇到各种问题,如网络异常、文件读取错误等。务必在代码中添加适当的异常处理逻辑,以提高应用的健壮性。

此外,如果你使用的是HarmonyOS提供的特定库或框架进行文件上传,确保遵循其官方文档中的最佳实践和API使用指南。

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

回到顶部