HarmonyOS 鸿蒙Next request.uploadFile 踩坑,以及疑似官方文档不严谨

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

HarmonyOS 鸿蒙Next request.uploadFile 踩坑,以及疑似官方文档不严谨 首先说明,我是 Node.js Express Multer 库做的后端,如果您使用其他技术栈,发现不存在本文描述的问题,那可以略过。

HTTP 请求,通过把 Content-Type 设置为 multipart/form-data,即可让 Body 携带文件字段。

下面是原始报文的部分:

Content-Disposition: form-data; name="file"; filename="1.jpg"
Content-Type: image/jpg

我想要表达的问题,就是报文里的这个 Content-Type,它需要客户端构建 HTTP 请求时去设置。

许多的 HTTP 构建工具,如各类 API 调试工具,如 JavaScript FormData 对象,能根据选择的文件自动设置这个文件类型。

而 ArkTS 里的 request.uploadFile,要求传入 request.File 对象,这个 File 对象包含一个 type 属性。

问题开始,下面是文档里的例子:

// 上传任务配置项
let files: Array<request.File> = [
//uri前缀internal://cache 对应cacheDir目录
  { filename: 'test.txt', name: 'test', uri: 'internal://cache/test.txt', type: 'txt' }
]

经过我测试,这个 type 属性,就是报文中的那个 Content-Type,所以如果是上面的 type: txt,那报文就会是:

Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: txt

可是我们知道,报文中的 Content-Type 是要求满足 Mime Type 的。

再看文档这个位置:request.File,对 type 属性的描述是:文件的内容类型,默认根据文件名或路径的后缀获取。

那如果我需要上传的是 jpg 图片,按这个表述,我是不是应该设置为 type: jpg 呢?

好,我刚开始看完文档,还真就是这么设置的,然后就悲催了。

报文变成了:

Content-Disposition: form-data; name="file"; filename="1.jpg"
Content-Type: jpg

然后,后端接收到的 File 是这样的:

{
  fieldname: 'file',
  originalname: '1.jpg',
  encoding: '7bit',
  mimetype: 'text/plain'
}

可以看到,mimetype 因为我前端把 type 设置为了 jpg 而不是 image/jpg,导致后端不识别文件类型,就默认识别为了 text/plain。

所以我认为,文档最好还是把 type 描述具体一些,说明它和 Mime Type 以及报文里的 Content-Type 里的关系。

就因为这个东西,我上传文件一直报错,说上传的文件类型不被允许。

对我来说,就是因为文档描述不清晰和不具体导致的这些问题,也有可能仅限于我会这么认为,遇到了我就记录下来。


更多关于HarmonyOS 鸿蒙Next request.uploadFile 踩坑,以及疑似官方文档不严谨的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

项目名称

  • 状态:进行中
  • 开始时间:2023-03-10
  • 结束时间:2023-03-20
  • 地点:线上

描述

这是一个示例项目,用于演示如何将HTML内容转换为Markdown格式。

成员

  • 张三
  • 李四
  • 王五

更多关于HarmonyOS 鸿蒙Next request.uploadFile 踩坑,以及疑似官方文档不严谨的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题“HarmonyOS 鸿蒙Next request.uploadFile 踩坑,以及疑似官方文档不严谨”的问题,以下是根据要求给出的回答:

在HarmonyOS开发中,若遇到request.uploadFile功能踩坑,并怀疑官方文档存在不严谨之处,可能的原因包括但不限于:

  1. API使用不当:检查request.uploadFile的调用方式是否符合HarmonyOS的API规范,包括参数传递、文件路径设置、权限申请等。

  2. 文档描述差异:对比实际代码实现与官方文档描述,确认是否存在描述不清或与实际行为不符的情况。若文档确实存在误导,可尝试在开发者社区或论坛反馈,以便官方修正。

  3. 系统版本差异:不同版本的HarmonyOS系统可能对API的实现有所差异,确保开发环境与目标设备系统版本一致,避免因版本不匹配导致的问题。

  4. 边缘情况处理:考虑文件大小、网络状态等边缘情况,确保代码中有相应的处理逻辑,避免因未处理边缘情况导致的上传失败。

若经过上述检查后问题仍未解决,建议详细记录问题现象、复现步骤及已尝试的解决方法,通过官方渠道提交问题反馈。同时,可访问官网客服页面寻求进一步帮助。

如果问题依旧没法解决请联系官网客服。

回到顶部