【自用笔记】小程序中使用七牛云上传图片

这篇具有很好参考价值的文章主要介绍了【自用笔记】小程序中使用七牛云上传图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因为我们之前使用的上传图片在上传比较大的图片时回显耗时很长,所以要求改用七牛云,根据领导给的参考和自己查的资料,做出来一个比较简单的可以满足需求。

首先需要进行准备工作:

内容参考这里(领导给的参考,因为部分准备工作已经做过了,所以我这里就直接从我自己做过的开始)↓

https://zhuanlan.zhihu.com/p/159399992

1.实名认证后,和后端配合,给你一个接口去调用获取到七牛token (这个token可以存储在app.globalData里,方便后面使用)

在这里你要选择自己的上传的地区,一共有五个,详情请自己在github上面去看,还是比较详细的,另外有一个domain的配置,是回显的时候用的,是自己公司的配置好的(开始我以为是配置我选择的那个区域的地址,后来找了很久,然后试了公司的链接后发现的,如果你在参考这篇笔记,还是需要自己试一下的)

2.接口可以调通后,去github上下载sdk文件包

软件开发工具包 - 七牛开发者中心这是参考里面给的链接,但是你可以直接从github上拉

gitHub链接:https://github.com/gpake/qiniu-wxapp-sdk#usage

git clone https://github.com/gpake/qiniu-wxapp-sdk.git

3.打开sdk包,把qiniuUploader.js导入你需要的小程序中,我放在了utils文件夹里,

4.剩下的就好说啦,这里封装了公共方法,借鉴的是:记录小程序使用七牛云上传图片详细步骤及遇到的坑 小程序七牛云上传文件代码封装_七牛云 小程序-CSDN博客

目前这个场景是:点击按钮调用wx.chooseMedia,仅支持单张,没有做任何处理(大小压缩等):

//upload.js

const { getToken } = require("../api/getQiniuToken.js")    // 获取七牛云token接口
const qiniuUploader = require("./qiniuUploader.js"); // 引入七牛云js

const app = getApp(); // 获取应用实例


  /**
   * 初始化七牛相关参数
   * @param {*} res 拿到的七牛云token
   * @param {*} region 上传区域  ECN, SCN, NCN, NA, ASG,分别对应七牛的:华东,华南,华北,北美,新加坡 5 个区域
   * @param {*} uptoken 七牛云token
   * @param {*} domain  bucket 域名,下载资源时用到。如果设置,会在 success callback 的 res 参数加上可以直接使用的 ImageURL 字段。否则需要自己拼接。
   * @param {*} shouldUseQiniuFileName  qiniuShouldUseQiniuFileName 如果是 true,则文件的 key 由 qiniu 服务器分配(全局去重)。如果是 false,则文件的 key 使用微信自动生成的 filename。出于初代sdk用户升级后兼容问题的考虑,默认是 false。
   * 微信自动生成的 filename较长,导致fileURL较长。推荐使用{qiniuShouldUseQiniuFileName: true} + "通过fileURL下载文件时,自定义下载名" 的组合方式。
   * 自定义上传key 需要两个条件:1. 此处shouldUseQiniuFileName值为false。 2. 通过修改qiniuUploader.upload方法传入的options参数,可以进行自定义key
   */
  const initQiniu = (res) => {
    var options = {
      region: 'ECN', // 华东  
      uptoken: res,
      // uptokenURL: 'https://[yourserver.com]/api/uptoken',
      // uptoken: '',
      domain: '此处为自己公司配置的网址', 
      shouldUseQiniuFileName: false
    };
    qiniuUploader.init(options);
  }

/**
 * 获取token, getToken是自己封装的接口请求方法,然后使用promise异步返回结果
 */
const getUploadToken = () => {
  return new Promise((resolve,reject)=>{
    getToken().then(res =>{
      if(res.data.message) {
        app.globalData.uploadParams = res.data.message;//此处放在app globalData里是为了避免重复获取token,本次使用期间可以无需重复获取
        initQiniu(res.data.message)  //如果在uploadImg中配置,则不需要init
        resolve(res.data.message)
       }
    })
  })
}


/**
 * 上传七牛
 * @param {*} params 主要存储了上传到七牛云的区域及上面接口获取到的upToken值
 * @param {*} files 图片文件
 */
const uploadImg = (params,files) => {
  var state = 0;    // 上传第几张图片
  var imgList = []; // 保存图片数组
  // let fileList = files.map(item => item.url);  //若files是有url键的对象,则可map进去,但目前只考虑wx自带单张选择图片的情况
  let fileList = [];
  fileList.push(files)
  var uploadArr = fileList;        // chooseMedia上传成功的数组
  var uploadNum = fileList.length; // 上传数组的长度
  return new Promise((resolve, reject)=> {
      for (let i = 0; i < uploadNum; i++) {
          var random = Math.floor(Math.random() * 10000); //随机数
          qiniuUploader.upload(uploadArr[i], (res) => {
              // 以下注释内容是针对多张上传的图片做出处理,返回的是图片地址的数组
              // state++;
              // imgList.push(res.imageURL);
              // if (state == uploadNum) {
              //     resolve(imgList);
              // }
              resolve(res)
          }, (error) => {
              reject('error');
              console.log('error: ' + error);
              wx.hideLoading();
          }, 
          // 以下为option中的自行配置参数,由于在init时就已经配置,所以这里注释掉,但可选择不init,在这里配置参数,
          // {
          //     uploadURL: params.uploadURL, //上传到七牛的那个存储区域所对应的前缀地址,详见SDK中的区域图(如:"https://up.qiniup.com")。
          //     domain: 'qiniu.pudu.live',//CDN加速域名,无需修改 || 按照自己需求,配置的下载地址
          //     uptoken: params.uploadToken, //服务端接口获取的七牛token值,我们这边后台返回的字段名为uploadToken,需要换成你们的自定义字段哦
          //     region: 'ECN',//上传区域,共有五个,按需选择
          //     key: null, // 图片自定义名称  避免名称重复此处设置为null可以解决上传undefined file exists问题
          // }
          )
      }
  }) 
}
module.exports = {
  getUploadToken,
  uploadImg
}
//所需组件 .wxml
<text  bindtap="getQiNiuToken">选择图片</text>
<image src="{{imageObject.fileURL}}" mode="aspectFit"></image>



// 所需组件的 .js
import { uploadImg,getUploadToken } from "../../utils/upload"

data:{
    imageObject: {}, // 图片上传(从相册)返回对象。上传完成后,此属性被赋值
}

//上传图片
handleUpload(params,file,type){
  uploadImg(params,file).then((imgObj)=>{
    console.debug("上传成功 files",imgObj);
    this.setData({
      imageObject: imgObj
    })
  }).catch((error)=>{
    console.log("图片上传失败",error);
  })
},

  //选择图片 检查是否有七牛token
  getQiNiuToken() {
    let _this = this;
     // 置空messageFileObject,否则在第二次上传过程中,wxml界面会存留上次上传的信息
     _this.setData({
      imageObject: {},
      imageProgress: {}
  });
    wx.chooseMedia({
      count: 1, // 目前仅支持单张上传
      mediaType: ['image','video'],
      sourceType: ['album', 'camera'],
      maxDuration: 30,
      camera: 'back',
      success(res) {
        let filePath = res.tempFiles[0].tempFilePath;  //图片地址
        let uploadParams = app.globalData.uploadParams; //判断是否已经请求过上传token
        if(uploadParams) {
            _this.handleUpload(uploadParams,filePath)
        } else {
          getUploadToken().then((res)=>{  //globalData没有上传所需参数,先获取token再上传图片
            _this.handleUpload(res,filePath);
          })
        }
      }
    })
  },

这样就可以实现一个最简单的上传、回显,中间遇到很多不懂的也是边查边试出来的,很多逻辑都不懂,但是功能实现了,各位大佬有更好的可以留言指正。文章来源地址https://www.toymoban.com/news/detail-845782.html

到了这里,关于【自用笔记】小程序中使用七牛云上传图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2+wangEditor5富文本编辑器(图片视频自定义上传七牛云/服务器)

    1、安装使用 安装 在main.js中引入样式 在使用编辑器的页面引入js 模板 js  到这一步编辑器就可以正常显示了 2、上传图片、视频 上传到后台接口的可直接按照文档这个配置就行接口返回格式也要可文档上一致    2)自定义上传(一般上传到别的服务器上,我这边是上传到七

    2024年02月11日
    浏览(67)
  • 使用七牛云、阿里云、腾讯云的对象存储上传文件

     说明:存在部分步骤省略的情况,请根据具体文档进行操作  下载相关sdk 表单提交到七牛云 表单提交到阿里云  表单提交到阿里云(sts) 说明:需要修改acl权限,不然无法上传文件 表单提交到腾讯云 表单提交到腾讯云(sts)  参考:  上传策略_使用指南_对象存储 - 七牛开发者

    2024年02月14日
    浏览(49)
  • 使用(七牛云)为例子实现将文件上传到云服务器

    目前,用户的头像、分享生成的长图等文件都是存放在本地的,我们可以将他们存放在云服务器中,此处我们使用七牛云作为例子示范。 创建账户并申请如下的两个bucket,分别是用户头像的存储空间和分享长图的存储空间。 相应的js文件: 文件已经存入七牛云

    2024年02月10日
    浏览(46)
  • flutter开发 - 七牛云上传sdk插件qiniu_flutter_sdk使用

    flutter七牛云上传sdk插件qiniu_flutter_sdk使用 最近在拆分代码,将上传组件设置成插件,下面记录下实现过程。 一、创建flutter_plugin上传插件 这里Android Studio使用创建plugin 填写一下信息 Project name Project location Description Project type Organization Android Language iOS Language Platforms 二、代码实

    2024年02月10日
    浏览(39)
  • 七牛云 图片存储

    在项目中,如用户头像、文章图片等数据往往需要使用单独的文件存储系统来保存 企业中常见的存储方案有两种: a.搭建分布式存储系统, 如FastDFS 数据量非常大, 具备相应的运维管理人员 b.第三方存储 运维成本低, 安全可靠 七牛云作为老牌云存储服务商, 提供了优质的第三方

    2024年02月16日
    浏览(41)
  • Gin+微服务实现抖音视频上传到七牛云

    如果你对Gin和微服务有一定了解,看本文较容易。 执行命令: Go SDK 的所有的功能,都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的 Access Key 和 Secret Key ,这对密钥可以通过如下步骤获得: 点击注册🔗开通七牛开发者帐号 如果已有账号,直接登录七牛开发

    2024年02月12日
    浏览(49)
  • springboot+vue项目中如何利用七牛云实现头像的上传

    做了个前后端分离的项目,对于用户的头像修改一直不是很满意, 于是用了Vant4的组件库改成了文件点击上传,先是打算存到本地,了解到七牛云的方便后(主要是免费),决定改成七牛云存储图片,记录一下操作,方便查看复习 目录 一、七牛云 七牛云简介 七牛云使用 二

    2024年02月11日
    浏览(55)
  • SpringBoot集成阿里云OSS、华为云OBS、七牛云、又拍云等上传案例【附白嫖方案】【附源码】

    唉!本文写起来都是泪点。不是刻意写的本文,主要是对日常用到的文件上传做了一个汇总总结,同时希望可以给用到的小伙伴带来一点帮助吧。 上传本地,这个就不水了,基本做技术的都用到过吧; 阿里云OSS,阿里云是业界巨鳄了吧,用到的人肯定不少吧,不过博主好久

    2024年02月22日
    浏览(48)
  • 七牛云上传报错 Expected URL scheme ‘http‘ or ‘https‘ but no colon was found

    报错如下: 报错意思是:请求的url没有冒号,正常的是http:// 或者https://。 相关说明:服务器环境为甲方提供的linux服务器,不是云服务器, 相当于没有连接外网 ,涉及调用第三方Api需要将调用地址和端口提供给他们。配置以后才可以调用。因此在提供七牛云调用地址时,是在本

    2024年01月20日
    浏览(51)
  • Springboot使用七牛云对象存储

    Springboot使用七牛云对象存储,学习文章地址: Spring Boot集成七牛云对象存储oss_springboot集成七牛云_dreaming9420的博客-CSDN博客 详细教程: Spring Boot集成七牛云 官方sdk地址 4.1在pom.xml中添加maven依赖 com.qiniu qiniu-java-sdk 7.7.0 编写yml配置文件 qiniu: kodo: # 配置accessKey accessKey: accessKey

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包