跨平台应用开发进阶 (四) :uni-app 实现上传图片

一、前言
应用uni-app开发跨平台 App 项目时,上传图片、文档等资源功能需求十分常见:点击相框按钮可选择图片上传,点击每一个图片可以进行预览,点击每个图片删除图标可删除对应图片。基本实现功能点如下:
本地相册选择图片或使用相机拍照上传图片;
可以预览选择上传的图片;
删除选错或不选的图片;
二、项目实战
经过研读uni-app门户,官网推荐应用uni.chooseImage(OBJECT)接口从本地相册选择图片或使用相机拍照。
对于门户提到的
选择照片大多为了上传,
uni ui封装了更完善的uni-file-picker组件,文件选择、上传到uniCloud的免费存储和 cdn 中,一站式集成。强烈推荐使用。
⚠️本人并不认可,经过实践可知,该接口只能实现客户端将图片资源上传到uniCloud后台服务器中,并不支持本地服务器,故并不满足功能需求,需谨慎使用。
项目实现页面大致逻辑如下,完整页面实现逻辑可移步《Uni-app 实现图片上传、删除、预览、压缩》下载。
视图渲染
JS 逻辑层-图片上传
JS 逻辑层-图片预览
JS 逻辑层-图片删除
JS 逻辑层-图片压缩
注意⚠️:在图片上传之前进行图片压缩,由于图片压缩时间过长,应采用
await上传图片之前先压缩,否则上传会比压缩先执行。
应用实现效果如下:拍照或从相册选择图片/上传一张图片
 
  
 上传 3 张图片/删除图片
 
  
 三、知识点总结
3.1 实现原理
客户端通过uni.chooseImage()方法选择本地相册图片或者拍照,获取到一个本地资源的临时文件路径后,然后以 POST 请求方式通过uni.uploadFile()方法将本地资源上传到开发者服务器,POST 请求中 content-type 为 multipart/form-data。
3.2 注意事项
- ⚠️图片选择应用 - uni.chooseImage()实现,请谨慎使用- uni ui封装的所谓更完善的- uni-file-picker组件,其将资源文件选择、上传到- uniCloud的免费存储和- cdn中,一站式集成,个人无法修改。强烈推荐不使用!
- ⚠️图片上传应用 - uni.uploadFile()实现,上传成功后回调函数返回的- uploadFileRes.data是个- String类型,转对象的时候需要应用- JSON.parse()解析。
- uni.uploadFile()OBJECT 参数说明部分中- name属性为待上传文件对应的- key, 开发者在服务器端通过这个- key可以获取到文件二进制内容,前后端对于该 key 应保持一致,否则会导致服务无法请求。
  
- 图片预览应用 - uni.previewImage()实现,没遇到坑,大家可根据需求按照门户参数使用。
四、学习一隅
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/87305324c46ea61d4b0ae0b39】。文章转载请联系作者。












 
    
评论