当前位置:   article > 正文

Uniapp小程序实现从相册选图/拍照后直接上传_uni-file-picker实现图片上传

uni-file-picker实现图片上传

最近在做小程序项目的时候遇到一个需求,就是实现从相册选图/拍照后直接调用后端接口上传,我想如果你此时忽略小程序不是基于浏览器运行的,然后想着怎么样去用向后端发送file格式文件,那真的就是大错特错了... 因为基于浏览器内置的JS环境根本就没有FormData、File等这些class... 看下效果图...

 

首先看下从相册选取图片/拍照的UNI API,这个没啥,直接依据文档调用就好... 

  1. // 从相册选图
  2. uni.chooseImage({
  3. count: 12, // 最多可以选择的图片张数,默认9
  4. sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
  5. sourceType: ['album'], //album 从相册选图,camera 使用相机
  6. success: (res) => {
  7. // TODO SUCCESS
  8. }
  9. })
  10. // 使用相机
  11. uni.chooseImage({
  12. count: 12, // 最多可以选择的图片张数,默认9
  13. sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
  14. sourceType: ['camera'], //album 从相册选图,camera 使用相机
  15. success: (res) => {
  16. // TODO SUCCESS
  17. }
  18. })
  19. // 从相册选图/使用相机
  20. uni.chooseImage({
  21. count: 12, // 最多可以选择的图片张数,默认9
  22. sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
  23. sourceType: ['album ','camera'], //album 从相册选图,camera 使用相机
  24. success: (res) => {
  25. // TODO SUCCESS
  26. }
  27. })

通过上述方法,发现通过success中的res,能够获取到图片临时文件的数组tempFilePaths,可以直接通过调用接口的方式,将临时文件交给后端去做处理,由于当时后端不接受这个临时文件,我就又多做一步处理,将临时文件处理为base64,然后再传给他...

简单说下怎么将临时文件转为base64,首先通过uni.getFileSystemManager()拿到文件处理器,因为需要读取文件的方法 ,然后遍历临时文件的数组去依次转换,由于读取文件的方法是异步的,这里需要Promise.all来处理一下,否则你传递给后端的base64数组还会是声明时候的空数组...

 

  1. Promise.all(
  2. res.tempFilePaths.map(item => {
  3. return new Promise((resolve, reject) => {
  4. fs.readFile({
  5. filePath: item,
  6. encoding: 'base64',
  7. success: res => {
  8. resolve('data:image/png;base64,' + res
  9. .data)
  10. },
  11. fail: err => {
  12. reject(err)
  13. }
  14. })
  15. })
  16. })
  17. ).then(results => { // 在这里处理所有文件的内容
  18. that.uploadLivePic(results)
  19. })

 到这里成功完成图片的上传,感觉对自己有帮助的小伙伴,可以留个star...

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/183480
推荐阅读
相关标签
  

闽ICP备14008679号