当前位置:   article > 正文

uniapp、微信小程序封装上传图片的方法_uniapp 小程序上传图片

uniapp 小程序上传图片

在我们开发小程序的时候,不能避免要使用到小程序上传图片的API  chooseImage 、uploadFile 方法

首先再我们程序文件utils 中 创建一个upImages.js 文件,废话也不不多说  直接上代码:

选择图片方法的封装:

  1. chooseImage(size){
  2. return new Promise((resolve,reject) => {
  3. uni.chooseImage({
  4. count: size, // 默认9
  5. sizeType: ['original', 'compressed'],
  6. sourceType: ['album','camera'],//['album','camera'],
  7. mediaType: ['image'],//['image', 'video'],
  8. success: function (res) {
  9. const tempFiles = res.tempFiles //包含图片大小的数组
  10. let answer = tempFiles.every(item => { //限制上传图片大小为
  11. return item.size <= 2*1024*1024
  12. })
  13. if (!answer) {
  14. toast('上传图片不能大于2M!')
  15. return
  16. }
  17. resolve(res)
  18. },
  19. fail:function(err){
  20. hideLoading()
  21. reject("选择文件失败",err)
  22. }
  23. })
  24. })
  25. },

count :默认9张图片

sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有

sourceType:['album','camera'], // 可以指定来源是相册还是相机,默认二者都有

mediaType:['image', 'video'], // 可以指定是图片视频,默认二者都有

上传图片方法的封装:

  1. uploadFile(file){
  2. return new Promise((resolve, reject) => {
  3. uni.uploadFile({
  4. header: {
  5. 'zrjkAppcode': getApp().globalData.zrjkAppCode
  6. },
  7. url: `${getApp().globalData.baseUrl}/api/multiUpload`,
  8. filePath: file,
  9. name: 'file',
  10. formData: {
  11. 'token': storage.get('userInfo').token
  12. },
  13. success: function (res) {
  14. var data = res.data;
  15. resolve(JSON.parse(data))
  16. },
  17. fail: function (err) {
  18. hideLoading()
  19. reject(err)
  20. },
  21. })
  22. })
  23. },

header 中的信息是根据自己需要来设置,也可以选默认的

getApp().globalData.baseUrl  是你上传图片的请求路劲

formData 可传可不传  我这里传的是token  根据后台程序员决定的

最后就是我需要再功能处调用的方法封装:

  1. async uploadPic(size=1){
  2. let chooseImageResult = await this.chooseImage(size)
  3. let imgArr = await chooseImageResult.tempFilePaths.map(async (item) => {
  4. let uploadFileResult = await this.uploadFile(item)
  5. return uploadFileResult.data;
  6. })
  7. return new Promise((resolve,reject) => {
  8. Promise.all(imgArr).then((result)=>{
  9. toast('上传成功')
  10. resolve(result)
  11. }).catch(err => {
  12. hideLoading()
  13. reject(err)
  14. })
  15. })
  16. },

size  是我们需要上传图片的张数  最大为9张

最后就是我们再页面中的使用: 首先要引入我们的js文件

import { upLoad } from '../../utils/upImages.js'   根据你文件路径自己修改


完整的代码:

  1. import { toast, hideLoading } from "./util.js"
  2. import storage from './storage.js'
  3. export const upLoad = {
  4. // 上传图片 返回一个图片的数组
  5. async uploadPic(size = 1){
  6. let chooseImageResult = await this.chooseImage(size)
  7. let imgArr = await chooseImageResult.tempFilePaths.map(async (item) => {
  8. let uploadFileResult = await this.uploadFile(item)
  9. return uploadFileResult.data;
  10. })
  11. return new Promise((resolve,reject) => {
  12. Promise.all(imgArr).then((result)=>{
  13. toast('上传成功')
  14. resolve(result)
  15. }).catch(err => {
  16. hideLoading()
  17. reject(err)
  18. })
  19. })
  20. },
  21. uploadFile(file){
  22. return new Promise((resolve, reject) => {
  23. uni.uploadFile({
  24. header: {
  25. 'zrjkAppcode': getApp().globalData.zrjkAppCode
  26. },
  27. url: `${getApp().globalData.baseUrl}/api/multiUpload`,
  28. filePath: file,
  29. name: 'file',
  30. formData: {
  31. 'token': storage.get('userInfo').token
  32. },
  33. success: function (res) {
  34. var data = res.data;
  35. resolve(JSON.parse(data))
  36. },
  37. fail: function (err) {
  38. hideLoading()
  39. reject(err)
  40. },
  41. })
  42. })
  43. },
  44. chooseImage(size){
  45. return new Promise((resolve,reject) => {
  46. uni.chooseImage({
  47. count: size, // 默认9
  48. sizeType: ['original', 'compressed'],//['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  49. sourceType: ['album','camera'],//['album','camera'], // 可以指定来源是相册还是相机,默认二者都有
  50. mediaType: ['image'],//['image', 'video'], // 可以指定是图片视频,默认二者都有
  51. success: function (res) {
  52. const tempFiles = res.tempFiles //包含图片大小的数组
  53. let answer = tempFiles.every(item => { //限制上传图片大小为,
  54. return item.size <= 2*1024*1024
  55. })
  56. if (!answer) {
  57. toast('上传图片不能大于2M!')
  58. return
  59. }
  60. resolve(res)
  61. },
  62. fail:function(err){
  63. hideLoading()
  64. reject("选择文件失败",err)
  65. }
  66. })
  67. })
  68. },
  69. }

toast: 这是封装的 uni.showToast

hideLoading : 这是封装的 uni.hideLoading

showLoading:   这是封装的uni.showLoading

微信小程序的上传图片方法基本一样,如有需要,自行修改一下

在最后,如有小伙伴想学习了解更多前端知识,可以关注我的公众号  codefuzi  一起成长

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

闽ICP备14008679号