当前位置:   article > 正文

微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)_微信小程序type提交视频文件图片

微信小程序type提交视频文件图片

微信小程序有自己封装好的我们直接拿过来用就可以了

接下来我们看看如何实现的吧

 

上传图片功能

效果如下:

单图上传 

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. imgList: "", // 上传图片
  7. },
  8. // 点击添加选择
  9. chooseSource: function () {
  10. var _this = this;
  11. wx.showActionSheet({
  12. itemList: ["拍照", "从相册中选择"],
  13. itemColor: "#000000",
  14. success: function (res) {
  15. if (!res.cancel) {
  16. if (res.tapIndex == 0) {
  17. _this.imgWShow("camera") //拍照
  18. } else if (res.tapIndex == 1) {
  19. _this.imgWShow("album") //相册
  20. }
  21. }
  22. }
  23. })
  24. },
  25. // 点击调用手机相册/拍照
  26. imgWShow: function (type) {
  27. var _this = this;
  28. let len = 0;
  29. if (_this.data.imgList != null) {
  30. len = _this.data.imgList.length
  31. } //获取当前已有的图片
  32. wx.chooseImage({
  33. count: 6 - len, //最多还能上传的图片数,这里最多可以上传5
  34. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  35. sourceType: [type], //可以指定来源是相册还是相机, 默认二者都有
  36. success: function (res) {
  37. wx.showToast({
  38. title: '正在上传...',
  39. icon: "loading",
  40. mask: true,
  41. duration: 1000
  42. })
  43. // 返回选定照片的本地文件路径列表,tempFilePaths可以作为img标签的scr属性显示图片
  44. var imgList = res.tempFilePaths
  45. _this.setData({
  46. imgList: imgList
  47. })
  48. },
  49. fail: function () {
  50. wx.showToast({
  51. title: '图片上传失败',
  52. icon: 'none'
  53. })
  54. return;
  55. }
  56. })
  57. },
  58. // 预览图片
  59. previewImg: function (e) {
  60. let index = e.target.dataset.index;
  61. let _this = this;
  62. wx.previewImage({
  63. current: _this.data.imgList[index],
  64. urls: _this.data.imgList
  65. })
  66. },
  67. /**
  68. * 点击删除图片
  69. */
  70. deleteImg: function (e) {
  71. var _this = this;
  72. var imgList = _this.data.imgList;
  73. var index = e.currentTarget.dataset.index; //获取当前点击图片下标
  74. wx.showModal({
  75. title: '提示',
  76. content: '确认要删除该图片吗?',
  77. success: function (res) {
  78. if (res.confirm) {
  79. console.log("点击确定了")
  80. imgList.splice(index, 1);
  81. } else if (res.cancel) {
  82. console.log("点击取消了");
  83. return false
  84. }
  85. _this.setData({
  86. imgList
  87. })
  88. }
  89. })
  90. },
  91. })

wxml

  1. <!-- 上传 S -->
  2. <view class="img-list">
  3. <!-- 上传列表 -->
  4. <block wx:for="{{imgList}}" wx:key="index">
  5. <view class="img-li">
  6. <view class="img-li" bindtap="previewImg">
  7. <image class="uploading-icon" src="{{item}}"></image>
  8. </view>
  9. <image class="icon-delete" src="../../../img/icon/icon-delete.png" bindtap="deleteImg"></image>
  10. </view>
  11. </block>
  12. <!-- 上传图片 S -->
  13. <view class="img-li" wx:if="{{imgList.length<=8}}" bindtap="chooseSource">
  14. <image class="uploading-icon" src="../../../img/icon/icon-add-images.png"></image>
  15. </view>
  16. <!-- 上传图片 E -->
  17. </view>
  18. <!-- 上传 E -->

js

 

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. imgList: [], // 上传图片列表
  7. },
  8. // 点击添加选择
  9. chooseSource: function () {
  10. var _this = this;
  11. wx.showActionSheet({
  12. itemList: ["拍照", "从相册中选择"],
  13. itemColor: "#000000",
  14. success: function (res) {
  15. if (!res.cancel) {
  16. if (res.tapIndex == 0) {
  17. _this.imgWShow("camera") //拍照
  18. } else if (res.tapIndex == 1) {
  19. _this.imgWShow("album") //相册
  20. }
  21. }
  22. }
  23. })
  24. },
  25. // 点击调用手机相册/拍照
  26. imgWShow: function (type) {
  27. var _this = this;
  28. let len = 0;
  29. if (_this.data.imgList != null) {
  30. len = _this.data.imgList.length
  31. } //获取当前已有的图片
  32. wx.chooseImage({
  33. count: 6 - len, //最多还能上传的图片数,这里最多可以上传5张
  34. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  35. sourceType: [type], //可以指定来源是相册还是相机, 默认二者都有
  36. success: function (res) {
  37. wx.showToast({
  38. title: '正在上传...',
  39. icon: "loading",
  40. mask: true,
  41. duration: 1000
  42. })
  43. // 返回选定照片的本地文件路径列表,tempFilePaths可以作为img标签的scr属性显示图片
  44. var imgList = res.tempFilePaths
  45. let tempFilePathsImg = _this.data.imgList
  46. // 获取当前已上传的图片的数组
  47. var tempFilePathsImgs = tempFilePathsImg.concat(imgList)
  48. _this.setData({
  49. imgList: tempFilePathsImgs
  50. })
  51. },
  52. fail: function () {
  53. wx.showToast({
  54. title: '图片上传失败',
  55. icon: 'none'
  56. })
  57. return;
  58. }
  59. })
  60. },
  61. // 预览图片
  62. previewImg: function (e) {
  63. let index = e.target.dataset.index;
  64. let _this = this;
  65. wx.previewImage({
  66. current: _this.data.imgList[index],
  67. urls: _this.data.imgList
  68. })
  69. },
  70. /**
  71. * 点击删除图片
  72. */
  73. deleteImg: function (e) {
  74. var _this = this;
  75. var imgList = _this.data.imgList;
  76. var index = e.currentTarget.dataset.index; //获取当前点击图片下标
  77. wx.showModal({
  78. title: '提示',
  79. content: '确认要删除该图片吗?',
  80. success: function (res) {
  81. if (res.confirm) {
  82. console.log("点击确定了")
  83. imgList.splice(index, 1);
  84. } else if (res.cancel) {
  85. console.log("点击取消了");
  86. return false
  87. }
  88. _this.setData({
  89. imgList
  90. })
  91. }
  92. })
  93. },
  94. })

上传视频功能

效果如下:

wxml

  1. <!-- 上传 S -->
  2. <view class="img-list">
  3. <!-- 上传列表 -->
  4. <view class="upload-video">
  5. <block wx:if="{{src != ''}}">
  6. <video src="{{src}}" class="img-li"></video>
  7. <image class="icon-deletes" src="../../../img/icon/icon-delete.png" bindtap="deleteVideo"></image>
  8. </block>
  9. </view>
  10. <block wx:for="{{imgList}}" wx:key="index">
  11. <!-- 视频 S -->
  12. <view class="img-li" wx:if="{{src == ''}}" bindtap="chooseVideo">
  13. <image class="uploading-icon" src="../../../img/icon/icon-add-images.png"></image>
  14. </view>
  15. <!-- 视频 E -->
  16. </view>
  17. <!-- 上传 E -->

js 

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. src: "", // 上传视频
  7. },
  8. /**
  9. * 选择视频
  10. */
  11. chooseVideo: function() {
  12. var _this = this;
  13. wx.chooseVideo({
  14. success: function(res) {
  15. _this.setData({
  16. src: res.tempFilePath,
  17. })
  18. }
  19. })
  20. },
  21. /**
  22. * 上传视频 目前后台限制最大100M, 以后如果视频太大可以选择视频的时候进行压缩
  23. */
  24. uploadvideo: function() {
  25. var src = this.data.src;
  26. wx.uploadFile({
  27. url: '',
  28. methid: 'POST', // 可用可不用
  29. filePath: src,
  30. name: 'files', // 服务器定义key字段名称
  31. header: app.globalData.header,
  32. success: function() {
  33. console.log('视频上传成功')
  34. },
  35. fail: function() {
  36. console.log('接口调用失败')
  37. }
  38. })
  39. },
  40. })

将上传图片 / 上传视频功能整合在一起

效果如下:

wxml

  1. <!-- 上传 S -->
  2. <view class="img-list">
  3. <!-- 上传列表 -->
  4. <view class="upload-video">
  5. <block wx:if="{{src != ''}}">
  6. <video src="{{src}}" class="img-li"></video>
  7. <image class="icon-deletes" src="../../../img/icon/icon-delete.png" bindtap="deleteVideo"></image>
  8. </block>
  9. </view>
  10. <block wx:for="{{imgList}}" wx:key="index">
  11. <view class="img-li">
  12. <view class="img-li" bindtap="previewImg">
  13. <image class="uploading-icon" src="{{item}}"></image>
  14. </view>
  15. <image class="icon-delete" src="../../../img/icon/icon-delete.png" bindtap="deleteImg"></image>
  16. </view>
  17. </block>
  18. <!-- 上传图片/视频 S -->
  19. <view class="img-li" wx:if="{{imgList.length<=8}}" bindtap="actioncnt">
  20. <image class="uploading-icon" src="../../../img/icon/icon-add-images.png"></image>
  21. </view>
  22. <!-- 上传图片/视频 E -->
  23. </view>
  24. <!-- 上传 E -->

js 

  1. // pages/my/my-release-experience-report/index.js
  2. const app = getApp()
  3. Page({
  4. /**
  5. * 页面的初始数据
  6. */
  7. data: {
  8. imgList: [], // 上传列表
  9. src: "", // 上传视频
  10. },
  11. // 点击添加选择
  12. chooseSource: function () {
  13. var _this = this;
  14. wx.showActionSheet({
  15. itemList: ["拍照", "从相册中选择"],
  16. itemColor: "#000000",
  17. success: function (res) {
  18. if (!res.cancel) {
  19. if (res.tapIndex == 0) {
  20. _this.imgWShow("camera") //拍照
  21. } else if (res.tapIndex == 1) {
  22. _this.imgWShow("album") //相册
  23. }
  24. }
  25. }
  26. })
  27. },
  28. // 点击调用手机相册/拍照
  29. imgWShow: function (type) {
  30. var _this = this;
  31. let len = 0;
  32. if (_this.data.imgList != null) {
  33. len = _this.data.imgList.length
  34. } //获取当前已有的图片
  35. wx.chooseImage({
  36. count: 6 - len, //最多还能上传的图片数,这里最多可以上传5张
  37. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  38. sourceType: [type], //可以指定来源是相册还是相机, 默认二者都有
  39. success: function (res) {
  40. wx.showToast({
  41. title: '正在上传...',
  42. icon: "loading",
  43. mask: true,
  44. duration: 1000
  45. })
  46. // 返回选定照片的本地文件路径列表,tempFilePaths可以作为img标签的scr属性显示图片
  47. var imgList = res.tempFilePaths
  48. let tempFilePathsImg = _this.data.imgList
  49. // 获取当前已上传的图片的数组
  50. var tempFilePathsImgs = tempFilePathsImg.concat(imgList)
  51. _this.setData({
  52. imgList: tempFilePathsImgs
  53. })
  54. },
  55. fail: function () {
  56. wx.showToast({
  57. title: '图片上传失败',
  58. icon: 'none'
  59. })
  60. return;
  61. }
  62. })
  63. },
  64. // 预览图片
  65. previewImg: function (e) {
  66. let index = e.target.dataset.index;
  67. let _this = this;
  68. wx.previewImage({
  69. current: _this.data.imgList[index],
  70. urls: _this.data.imgList
  71. })
  72. },
  73. /**
  74. * 点击删除图片
  75. */
  76. deleteImg: function (e) {
  77. var _this = this;
  78. var imgList = _this.data.imgList;
  79. var index = e.currentTarget.dataset.index; //获取当前点击图片下标
  80. wx.showModal({
  81. title: '提示',
  82. content: '确认要删除该图片吗?',
  83. success: function (res) {
  84. if (res.confirm) {
  85. console.log("点击确定了")
  86. imgList.splice(index, 1);
  87. } else if (res.cancel) {
  88. console.log("点击取消了");
  89. return false
  90. }
  91. _this.setData({
  92. imgList
  93. })
  94. }
  95. })
  96. },
  97. /**
  98. * 点击删除视频
  99. */
  100. deleteVideo: function(e) {
  101. var _this = this;
  102. var src = _this.data.src;
  103. var index = e.currentTarget.dataset.index; //获取当前点击图片下标
  104. wx.showModal({
  105. title: '提示',
  106. content: '确认要删除该视频吗?',
  107. success: function (res) {
  108. if (res.confirm) {
  109. console.log("点击确定了")
  110. var unsrc = '';
  111. _this.setData({
  112. src: unsrc
  113. })
  114. } else if (res.cancel) {
  115. console.log("点击取消了");
  116. return false
  117. }
  118. }
  119. })
  120. },
  121. /**
  122. * 图片 视频 选择框
  123. */
  124. actioncnt: function() {
  125. var _this = this;
  126. wx.showActionSheet({
  127. itemList: ['图片', '视频'],
  128. success: function(res) {
  129. if(res.tapIndex == 0) {
  130. _this.chooseSource()
  131. }
  132. if(res.tapIndex == 1) {
  133. _this.chooseVideo()
  134. }
  135. },
  136. fail: function(res) {
  137. console.log(res.errMsg)
  138. }
  139. })
  140. },
  141. /**
  142. * 选择视频
  143. */
  144. chooseVideo: function() {
  145. var _this = this;
  146. wx.chooseVideo({
  147. success: function(res) {
  148. _this.setData({
  149. src: res.tempFilePath,
  150. })
  151. }
  152. })
  153. },
  154. /**
  155. * 上传视频 目前后台限制最大100M, 以后如果视频太大可以选择视频的时候进行压缩
  156. */
  157. uploadvideo: function() {
  158. var src = this.data.src;
  159. wx.uploadFile({
  160. url: '',
  161. methid: 'POST', // 可用可不用
  162. filePath: src,
  163. name: 'files', // 服务器定义key字段名称
  164. header: app.globalData.header,
  165. success: function() {
  166. console.log('视频上传成功')
  167. },
  168. fail: function() {
  169. console.log('接口调用失败')
  170. }
  171. })
  172. },
  173. })

共用wxss

  1. /* 上传的图片 */
  2. .img-list {
  3. display: flex;
  4. flex-wrap: wrap;
  5. }
  6. .img-li {
  7. width: 200rpx;
  8. height: 200rpx;
  9. margin-right: 39rpx;
  10. margin-bottom: 23rpx;
  11. }
  12. .img-li:first-child {
  13. margin-right: 0;
  14. }
  15. .img-li image {
  16. width: 100%;
  17. height: 100%;
  18. }
  19. .icon-delete {
  20. width: 28rpx !important;
  21. height: 28rpx !important;
  22. position: relative;
  23. float: right;
  24. margin-top: -229rpx;
  25. margin-right: -15rpx;
  26. z-index: 99;
  27. }
  28. .icon-deletes {
  29. width: 28rpx !important;
  30. height: 28rpx !important;
  31. position: relative;
  32. float: right;
  33. margin-top: -9rpx;
  34. margin-left: -10rpx;
  35. margin-right: 29rpx;
  36. z-index: 99;
  37. }
  38. .content-input-z {
  39. display: flex;
  40. align-items: center;
  41. justify-content: space-between;
  42. font-size: 24rpx;
  43. color: #999999;
  44. }
  45. .content-input-z {
  46. margin-top: 31rpx;
  47. }
  48. .content-input-z view image {
  49. width: 32rpx;
  50. height: 31rpx;
  51. margin-right: 11rpx;
  52. }
  53. .content-input-z view {
  54. display: flex;
  55. align-items: center;
  56. }

学习讨论群

QQ群: 1102727334

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