此代码示例,能够让你成功将图片上传至后端,后端做相应的处理,然后返回成功码。

前端小程序代码

index.wxml:

  1. <view class='content'>
  2. <view class='img-box'>
  3. <view class='img-list'>
  4. <block wx:for="{{detailPics}}" wx:key="index">
  5. <view class='img-item'>
  6. <image src='{{item}}' bindlongpress="bindlongpressimg" data-id='{{index}}'></image>
  7. </view>
  8. </block>
  9. <view class='chooseimg' bindtap='uploadDetailImage'>
  10. <view class="weui-uploader__input-box"></view>
  11. </view>
  12. </view>
  13. <view class='tips'>长按对应的图片即可删除</view>
  14. </view>
  15. </view>

index.wxss:

  1. .content {
  2. width: %;
  3. background-color: #fff;
  4. }
  5.  
  6. .img-list {
  7. display: flex;
  8. display: -webkit-flex;
  9. flex-direction: row;
  10. justify-content: flex-start;
  11. align-items: center;
  12. flex-wrap: wrap;
  13. }
  14.  
  15. .img-item {
  16. width: %;
  17. text-align: left;
  18. margin-right: 20rpx;
  19. margin-bottom: 10rpx;
  20. }
  21.  
  22. .img-item image {
  23. width: 180rpx;
  24. height: 180rpx;
  25. }
  26.  
  27. .submit-btn {
  28. width: %;
  29. background-color: #fff;
  30. height: 80rpx;
  31. text-align: center;
  32. line-height: 80rpx;
  33. font-size: 30rpx;
  34. position: fixed;
  35. bottom: 100rpx;
  36. }
  37.  
  38. .chooseimg {
  39. background-color: #fff;
  40. }
  41.  
  42. .weui-uploader__input-box {
  43. float: left;
  44. position: relative;
  45. margin-right: 9px;
  46. margin-bottom: 9px;
  47. width: 180rpx;
  48. height: 180rpx;
  49. border: 1px solid #d9d9d9;
  50. }
  51.  
  52. .weui-uploader__input-box:before {
  53. width: 2px;
  54. height: .5px;
  55. }
  56.  
  57. .weui-uploader__input-box:after, .weui-uploader__input-box:before {
  58. content: " ";
  59. position: absolute;
  60. top: %;
  61. left: %;
  62. -webkit-transform: translate(-%, -%);
  63. transform: translate(-%, -%);
  64. background-color: #d9d9d9;
  65. }
  66.  
  67. .weui-uploader__input-box:after {
  68. width: .5px;
  69. height: 2px;
  70. }
  71.  
  72. .weui-uploader__input-box:after, .weui-uploader__input-box:before {
  73. content: " ";
  74. position: absolute;
  75. top: %;
  76. left: %;
  77. -webkit-transform: translate(-%, -%);
  78. transform: translate(-%, -%);
  79. background-color: #d9d9d9;
  80. }
  81.  
  82. .tips {
  83. color: #;
  84. font-size: 24rpx;
  85. padding-bottom: 20rpx;
  86. }
  87.  
  88. .img-box {
  89. width: %;
  90. margin: auto;
  91. padding-top: 20rpx;
  92. }

index.js:

  1. // component/uploadImages/index.js
  2. Component({
  3. /**
  4. * 组件的属性列表
  5. */
  6. properties: {
  7. count: { //最多选择图片的张数,默认9张
  8. type: Number,
  9. value:
  10. },
  11. uploadUrl: { //图片上传的服务器路径
  12. type: String,
  13. value: ''
  14. },
  15. showUrl: { //图片的拼接路径
  16. type: String,
  17. value: ''
  18. }
  19. },
  20.  
  21. /**
  22. * 组件的初始数据
  23. */
  24. data: {
  25. detailPics: [], //上传的结果图片集合
  26. },
  27.  
  28. ready: function () {
  29. console.log(this.data)
  30. },
  31.  
  32. /**
  33. * 组件的方法列表
  34. */
  35. methods: {
  36.  
  37. uploadDetailImage: function (e) { //这里是选取图片的方法
  38. var that = this;
  39. var pics = [];
  40. var detailPics = that.data.detailPics;
  41. if (detailPics.length >= that.data.count) {
  42. wx.showToast({
  43. title: '最多选择' + that.data.count + '张!',
  44. })
  45. return;
  46. }
  47. wx.chooseImage({
  48. count: that.data.count, // 最多可以选择的图片张数,默认9
  49. sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
  50. sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
  51. success: function (res) {
  52. var imgs = res.tempFilePaths;
  53. for (var i = ; i < imgs.length; i++) {
  54. pics.push(imgs[i])
  55. }
  56. that.uploadimg({
  57. url: "http://www.test.com//test-api/wechat/applet/api/uploadUserAvatar", //这里是你图片上传的接口
  58. path: pics, //这里是选取的图片的地址数组
  59. });
  60. },
  61. })
  62.  
  63. },
  64. //多张图片上传
  65. uploadimg: function (data) {
  66. wx.showLoading({
  67. title: '上传中...',
  68. mask: true,
  69. })
  70. var that = this,
  71. i = data.i ? data.i : ,
  72. success = data.success ? data.success : ,
  73. fail = data.fail ? data.fail : ;
  74. wx.uploadFile({
  75. url: data.url,
  76. filePath: data.path[i],
  77. name: 'file',
  78. formData: {"userId":""},
  79. success: (resp) => {
  80. wx.hideLoading();
  81. success++;
  82. var str = resp.data //返回的结果,可能不同项目结果不一样
  83.  
  84. console.log(str);
  85. // var pic = JSON.parse(str);
  86. // var pic_name = that.data.showUrl + pic.Data;
  87. // var detailPics = that.data.detailPics;
  88. // detailPics.push(pic_name)
  89. // that.setData({
  90. // detailPics: detailPics
  91. // })
  92. },
  93. fail: (res) => {
  94. fail++;
  95. console.log('fail:' + i + "fail:" + fail);
  96. },
  97. complete: () => {
  98. i++;
  99. if (i == data.path.length) { //当图片传完时,停止调用
  100. console.log('执行完毕');
  101. console.log('成功:' + success + " 失败:" + fail);
  102. var myEventDetail = {
  103. picsList: that.data.detailPics
  104. } // detail对象,提供给事件监听函数
  105. var myEventOption = {} // 触发事件的选项
  106. that.triggerEvent('myevent', myEventDetail, myEventOption)//结果返回调用的页面
  107. } else { //若图片还没有传完,则继续调用函数
  108. data.i = i;
  109. data.success = success;
  110. data.fail = fail;
  111. that.uploadimg(data);//递归,回调自己
  112. }
  113. }
  114. });
  115. },
  116.  
  117. }
  118. })

后端Java代码(这里我使用的是第三方存储,如腾讯云,如果读者朋友们是使用第三方存储替换是一件很容易的事情)

核心代码如下:

  1. @PostMapping("/uploadUserAvatar")
  2. @ApiOperation(value = "上传用户头像", notes = "上传用户头像")
  3. public JSONObject uploadUserAvatar(HttpServletRequest request) {
  4.  
  5. JSONObject json = new JSONObject();
  6. try {
  7.  
  8. String userId = request.getParameter("userId");
  9.  
  10. COSClientUtil cosClientUtil = new COSClientUtil();
  11.  
  12. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  13.  
  14. // 获取上传的文件
  15. MultipartFile multiFile = multipartRequest.getFile("file");
  16.  
  17. String name = cosClientUtil.uploadFileCos(multiFile);
  18.  
  19. // 获取文件路径
  20. String fileUrl = cosClientUtil.getFileUrl(name);
  21.  
  22. Console.log("fileUrl:"+fileUrl);
  23.  
  24. // 对文件路径进行处理
  25. String dbFileUrl = fileUrl.substring(, fileUrl.indexOf("?"));
  26.  
  27. Console.log("dbFileUrl:"+dbFileUrl);
  28.  
  29. User user = new User();
  30. user.setId(Integer.parseInt(userId));
  31. user.setSmallAvatar(dbFileUrl);
  32.  
  33. boolean isUploadUserAvatar = userService.updateById(user);
  34.  
  35. if (isUploadUserAvatar) {
  36. json.put(ResponseUtils.CODE, ResponseUtils.SUCCESS_CODE);
  37. json.put(ResponseUtils.MSG, ResponseUtils.SUCCEESS_MSG);
  38. } else {
  39. json.put(ResponseUtils.CODE, ResponseUtils.ERROR_CODE);
  40. json.put(ResponseUtils.MSG, ResponseUtils.ERROR_MSG);
  41. }
  42.  
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45.  
  46. json.put(ResponseUtils.CODE, ResponseUtils.ERROR_CODE);
  47. json.put(ResponseUtils.MSG, ResponseUtils.ERROR_MSG);
  48.  
  49. }
  50.  
  51. return json;
  52. }

微信小程序之上传图片(含前后端代码例子)的更多相关文章

  1. 微信小程序批量上传图片 All In One

    微信小程序批量上传图片 All In One open-data https://developers.weixin.qq.com/miniprogram/dev/component/open-dat ...

  2. 微信小程序/网站 上传图片到腾讯云COS

    COS简介: 腾讯云提供的一种对象存储服务,供开发者存储海量文件的分布式存储服务.可以将自己开发的应用的存储部分全部接入COS的存储桶中,有效减少应用服务器的带宽,请求等.个人也可以通过腾讯云账号免费 ...

  3. (干货)微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  4. 微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  5. 微信小程序左右滑动切换页面示例代码--转载

    微信小程序——左右滑动切换页面事件 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend. 这三个事件最重要的属性是pageX和pageY,表示X, ...

  6. 微信小程序+php 授权登陆,完整代码

    先上图        实现流程: 1.授权登陆按钮和正文信息放到了同一个页面,未授权的时候显示登陆按钮,已授权的时候隐藏登陆按钮,显示正文信息,当然也可以授权和正文分开成两个页面,在授权页面的onlo ...

  7. 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用

    目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...

  8. 小程序php支付,前后端分离

    小程序端: xml: <button type="default" bindtap="payOrder">支付</button> js: ...

  9. 微信小程序token失效 自动请求后端,适用于自动登录

    app.js // app.js App({ onLaunch() { let token = wx.getStorageSync('token') if (!token) { wx.login({ ...

随机推荐

  1. npm安装时-S -D作用及区别

    -S 即--save(保存) 包名会被注册在package.json的dependencies里面,在生产环境下这个包的依赖依然存在 -D 即--dev(生产) 包名会被注册在package.json ...

  2. IDEA创建本地Spark程序,并本地运行

    1   IDEA创建maven项目进行测试 v创建一个新项目,步骤如下: 选择“Enable Auto-Import”,加载完后:选择“Enable Auto-Import”,加载完后: 添加SDK依 ...

  3. mysql新加用户设置权限

    1.开通操作权限和表权限 GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON interface.* TO test1@'%' identif ...

  4. 【干货】gitlab-11.10.4版本汉化

    目录 1.YUM安装gitlab-11.10.4 2.gitlab汉化技能 1.YUM安装gitlab-11.10.4 下载gitlab-ce的repo [root@localhost ~]# cur ...

  5. 蓝桥杯如何训练?(附VIP题库)

    https://www.dotcpp.com/ 给大家介绍下蓝桥杯,是近几年可以说国内名气最大的程序设计类比赛了 相比国际赛事ACM,蓝桥杯入门简单.中文答题.拿奖率高,更适合国内大众化参加,近几年不 ...

  6. 纯数据结构Java实现(7/11)(SegmentTree)

    欢迎访问我的自建博客: CH-YK Blog.

  7. sklearn---DBSCAN

    参考文献: [1]用scikit-learn学习DBSCAN聚类

  8. C++类库开发详解(转)

    前言:这是一篇总结性的文章,需要有一点C++和dll基本知识的基础,在网上查阅了很多资料感觉没有一篇详细.具体.全面的dll开发介绍,我这是根据最近项目和网上资料整理出来的,并附带实例的一个总结性的文 ...

  9. com.alibaba.fastjson.JSONException: exepct '[', but error, pos 1, json : %255B%257B%2522list%2522%253A%255B%257B%2522itemId%2522%253A1369331%252C%2522num%2522%253A2%257D%255D%257D%255

    com.alibaba.fastjson.JSONException: exepct '[', but error, pos 1, json : %255B%257B%2522list%2522%25 ...

  10. 聊聊CMSIS-RTOS是什么东东

    起因:发布自己翻译用的CMSIS_RTOS_Tutorial后,陆续收到网友关于“CMSIS-RTOS是干么的?”之类的问题,再次统一回复. 众所周知,实时操作系统是嵌入式领域的基石.而可选的嵌入式操 ...