HarmonyOS 鸿蒙Next request.uploadFile 踩坑,以及疑似官方文档不严谨
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
项目名称
- 状态:进行中
- 开始时间: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
功能踩坑,并怀疑官方文档存在不严谨之处,可能的原因包括但不限于:
-
API使用不当:检查
request.uploadFile
的调用方式是否符合HarmonyOS的API规范,包括参数传递、文件路径设置、权限申请等。 -
文档描述差异:对比实际代码实现与官方文档描述,确认是否存在描述不清或与实际行为不符的情况。若文档确实存在误导,可尝试在开发者社区或论坛反馈,以便官方修正。
-
系统版本差异:不同版本的HarmonyOS系统可能对API的实现有所差异,确保开发环境与目标设备系统版本一致,避免因版本不匹配导致的问题。
-
边缘情况处理:考虑文件大小、网络状态等边缘情况,确保代码中有相应的处理逻辑,避免因未处理边缘情况导致的上传失败。
若经过上述检查后问题仍未解决,建议详细记录问题现象、复现步骤及已尝试的解决方法,通过官方渠道提交问题反馈。同时,可访问官网客服页面寻求进一步帮助。
如果问题依旧没法解决请联系官网客服。