• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

vue网页小程序实现七牛云图片文件上传以及原生组件video显示不出问题 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

七牛云图片、文件上传


⭐vue网页端


一般vue项目搭载 element-ui,因此我们直接采用 el-upload 组件实现图片、文件上传。本文以图片上传为例


① 获取七牛云上传参数,即上传所需token


在methods里面定义一个方法 getQiniuToken


// 获取七牛云上传参数
getQiniuToken{
    // 这里采用axios调取接口, baseUrl即为接口请求服务器地址
 this.$axios.post(baseUrl+\'api/upload_qiniu_get_token\',{
    }).then((res) => {
     // 下面保存参数,视具体接口而变
    var data = res.data;
    if(data.error_code == 0){
        this.uploadData = {
        	token:data.token // 获取上传token
    	}
    	this.img_domain = data.host; // 保存图片前缀
    }
    }).catch((err) => {

    });
}

el-upload 组件使用


action参数:根据存储区域会有相应的上传地址,


data参数: 上传所需参数即 {token: xxx}


  <el-upload
      action="https://upload-z2.qiniup.com"
      :data="uploadData"
      :show-file-list="false"
      accept="image/*"
      :on-success="handleSuccess">
      <el-image
          style="width: 100px; height: 100px"
          :src="img"
          fit="cover">
          <div slot="error" class="image-slot">
          	<i class="el-icon-picture-outline"></i>
          </div>
      </el-image>
  </el-upload>

③上传成功,保存地址,借助 el-image展示图片


handleSuccess(res){
    this.img = this.img_domain + res.key; 
    // res.key是上传七牛云服务器后换来的凭证,拼接图片前缀,即可展示图片
}

⭐小程序版


上传图片


① 获取七牛云参数


// 获取七牛云参数
  getQiniuToken(){
    let that = this
    // 请求接口
    request.request(\'get\',\'api/upload_qiniu_get_token\',{
      
    },function(res){
      console.log(res)
      if (res.error_code == 0) {
        that.setData({
          token: res.data.token  // 将上传token保存下来
        })
      }
      else{
        wx.showToast({
          title: res.error_message,
          icon : \'none\'
        })
      }
    },(err)=>{
    })
  },

② 上传图片


<!-- 上传图片展示的地方imgs -->
<view class="item" wx:for="{{imgs}}" wx:key="index">
   <image class="pic" bindtap="previewImg" data-index="{{index}}" src="{{item}}"></image>
   <image class="close" bindtap="delImg" data-index="{{index}}" src="/images/muban/close.png"></image>
</view>

<!-- 随便来张图片充当一下上传按钮即可 -->
<view class="item" bindtap="uploadImg">
	<image class="pic" src="/images/add_pic.png"></image>
</view>

uploadImg方法


// 调用微信选择图片api  
uploadImg() {
	let that = this
	wx.chooseImage({
      count: 9,
      success (res) {
          console.log(res)
          // tempFilePath可以作为img标签的src属性显示图片
          const tempFilePaths = res.tempFilePaths
          // 显示加载
           wx.showLoading({
            title: \'玩命加载中\',
          })
          // 实现多图片上传
          for(let i=0;i<tempFilePaths.length;i++){
              wx.uploadFile({
                  url: \'https://up-z2.qiniup.com\', // 七牛云上传地址
                  filePath: tempFilePaths[i],
                  name: \'file\',
                  formData: {
                  \'token\': that.data.token, // 上传token
                  },
                  success (res){
                      console.log(res)
                      let domain = that.data.img_domain
                      const data = JSON.parse(res.data)
                      that.data.imgs.push(domain + data.key) //拼接图片
                      that.setData({
                          imgs: that.data.imgs 
                      })
                     
                  },
                  complete(){
                      if(i == tempFilePaths.length-1){
                          wx.hideLoading()
                      }
                  }
              })
          }
       }
    })
}

previewImg预览图片


// 点击放大预览图片
previewImg(e){
     var index = e.currentTarget.dataset.index;
	 wx.previewImage({
        current: this.data.imgs[index], 
        urls: this.data.imgs
    })
}

delImg删除图片


  // 删除图片
  delImg(e){
    var index = e.currentTarget.dataset.index;
    this.data.imgs.splice(index,1);
    this.setData({
        imgs: this.data.imgs
    })
  },

上传视频


与上传图片类似,这里就贴一下上传的方法好啦


 // 上传视频
  uploadVideo(e){
    let that = this
    wx.chooseVideo({
      success (res) {
          const tempFilePaths = res.tempFilePath
          console.log(res)
          // 显示加载
           wx.showLoading({
            title: \'玩命加载中\',
          })
          wx.uploadFile({
              url: \'https://upload-z2.qiniup.com\', 
              filePath: tempFilePaths,
              name: \'file\',
              formData: {
                  \'token\': that.data.token
              },
              success (res){
                  console.log(res)
                  let domain = that.data.video_domain
                  const data = JSON.parse(res.data)
                  that.data.videos.push(domain + data.key)
                  that.setData({
                      videos: that.data.videos
                  })
              },
              complete(){
                  wx.hideLoading()
              }
          })
      }
  	})
  },

预览视频失败解决


有些时候会遇到直接点击 video微信原生组件会出现黑屏或不显示问题,这边推荐使用小程序的 previewMedia 接口来实现预览


<view class="item" wx:for="{{videos}}" wx:key="index">
    <video class="pic" bindtap="onPreviewVideo" data-url="{{item}}" src="{{item}}"></video>
    <image class="close" bindtap="delVideo" data-index="{{index}}" src="/images/muban/close.png"></image>
</view>

 // 预览视频
  onPreviewVideo(e){
    // 获取视频地址
    let urls = e.currentTarget.dataset.url
    console.log(urls)
    wx.previewMedia({
      sources: [{
        url: urls,
        type: \'video\',
        poster:\'https://i.loli.net/2021/08/26/vhdxCoH3wUq9nZz.png\' // 预览图,随喜好来,不写也没事
      }],
      current: 0,
      fail() {
        wx.showToast({ title: \'预览视频失败\', icon: \'none\' });
      },
    });
  },

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信小程序 - 3d轮播图组件(基础)发布时间:2022-07-18
下一篇:
微信小程序 - 上拉加载更多组件发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap