美文网首页
node+vue实现文件服务端上传直传七牛云服务器

node+vue实现文件服务端上传直传七牛云服务器

作者: 风中凌乱的男子 | 来源:发表于2022-09-27 21:54 被阅读0次

    背景:利用七牛云提供的SDK实现上传文件到七牛云,前端需要上传凭证,而上传凭证需要后端给到,下面是node调用七牛云sdk生成上传凭证(要用到qiniusdk,安装cnpm i qiniu --save)

    //七牛云配置文件
    const qiniu = require('qiniu')
    
    // 创建上传凭证(accessKey 和 secretKey在七牛云个人中心中有,lytton是七牛云刚才创建的空间名称)
    const accessKey = 'xxxxx-AiE6m44AlAFxK72' //你自己七牛的密钥
    const secretKey = 'xxxxxx-1_VqgRTljRUrduWA' //你自己七牛的密钥
    const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
    const options = {
      scope: 'aoaoe', //这是你创建存储空间的名字
      // deadline: 1695523678 //这是七牛云生成token的有效期,单位时秒,不设置默认是3600S,一串数字是时间戳
    }
    const putPolicy = new qiniu.rs.PutPolicy(options)
    const uploadToken = putPolicy.uploadToken(mac)
    
    module.exports = {
      uploadToken  //导出的是七牛云生成的token,很重要
    }
    

    然后写一个接口供前端调用

    //前端获取到七牛云返回的token
    router.get('/getQniuToken', (req, res) => {
        console.log('输出下七牛云的token', uploadToken);
        res.json({
            code: 200,
            data: uploadToken.uploadToken,
            messages: '获取成功'
        })
    })
    

    下面是前端调用接口上传图片

    • 安装七牛云sdk cnpm i qiniu-js --save
    • 引入sdk import * as qiniu from 'qiniu-js'
    • 引入获取上传凭证的接口 import { getQniuToken } from '@/api/user'
    • 写一个上传方法
    upLoadFun() {
          let config = { useCdnDomain: true, region: qiniu.region.z0 }
          let putExtra = { fname: file, params: {}, mimeType: null }
          //开始上传  token 需要找后端获取(单独的方法)
          getQniuToken().then(res => {
            let upToken = res.data.uploadToken
            let baseUrl = res.data.buckethostname
            let headers = qiniu.getHeadersForMkFile(upToken)
            //file 是获取到的文件对象
            //key 是文件名字,传null将使用hash值来当作文件名
            let observable = qiniu.upload(file, key, upToken, headers, putExtra, config)
            this.subscription = observable.subscribe(observe)
          })
          let observe = {
            next(res) {
              // console.log('已上传大小,单位为字节:' + res.total.loaded)
              // console.log('本次上传的总量控制信息,单位为字节:' + res.total.size)
              // console.log('当前上传进度,范围:0~100:' + res.total.percent);
              console.log(res)
            },
            error(err) {
              // console.log(err.code)
              // console.log(err.message)
              // console.log(err.isRequestError)
              // console.log(err.reqId)
              console.log(err)
            },
            /*完成后的操作*/
            complete(res) {
              //上传成功以后会返回key 和 hash  key就是文件名了!
              console.log(res)
              // let fileUrl =baseUrl + '/' + res.key
            }
          }
        }
    

    相关文章

      网友评论

          本文标题:node+vue实现文件服务端上传直传七牛云服务器

          本文链接:https://www.haomeiwen.com/subject/sxjqartx.html