zoukankan      html  css  js  c++  java
  • vue 百度云上传文件PostObject

    百度云上传文件 API(PostObject)

    PostObject接口  :

    接口描述

    此接口使用HTML表单上传文件到指定bucket,用于实现通过浏览器上传文件到bucket。在PutObject操作中通过HTTP请求头传递参数,在PostObject操作中使用消息实体中的表单域传递参数,其中消息实体使用多重表单格式(multipart/form-data)编码。

    该接口调用需要用到 base64和sha256加密

    1、安装 js-base64

      npm install js-base64 --save

      使用:

      const Base64 = require('js-base64').Base64
       var basePolicy = Base64.encode(str)

    2、安装 crypto-js

       npm install crypto-js --save

      使用

      const CryptoJS = require('crypto-js')
      let signature = CryptoJS.HmacSHA256(basePolicy, config.sk).toString()

    3、具体代码如下(接口使用axios访问,)

    // tslint:disabled
    <template>
      <div>
        <van-uploader :after-read="upload" :before-read="upload" />
      </div>
    </template>
    
    <script>
    import Axios from 'axios'
    const Base64 = require('js-base64').Base64
    const CryptoJS = require('crypto-js')
    const config = {
      bcebosBucket: 'xxxx',
      endpoint: 'xxxxxxxx', //Bucket所在区域域名
      ak: 'xxxxx', //您的AccessKey
      sk: 'xxxxx' //您的SecretAccessKey
    }
    
    export default {
      methods: {
        data() {
          return {}
        },
        beforeRead(file) {
          debugger
          if (file.type !== 'image/jpeg') {
            Toast('请上传 jpg 格式图片')
            return false
          }
          return true
        },
        upload(file, detail) {
          debugger
          /**
           * bos 上传文件接口网站
           * https://cloud.baidu.com/doc/BOS/s/qjwvyseos#postobject%E6%8E%A5%E5%8F%A3
           */
          let date = new Date()
          let year = date.getFullYear()
          let month = date.getMonth() + 1
          // bos参数组装 key-文件存储位置和名称
          let key =
            config.bcebosBucket + '/' + year + '/' + month + '/' + file.file.name
          // policy 格式见网站 String
          let expiration = {
            expiration: this.formate(date, 'yyyy-MM-ddThh:mm:ssZ'),
            conditions: [{ bucket: config.bcebosBucket }, { key: key }]
          }
          let str = JSON.stringify(expiration)
          var basePolicy = Base64.encode(str)
          let signature = CryptoJS.HmacSHA256(basePolicy, config.sk).toString()
    
          let formData = new FormData()
          formData.append('key', key)
          formData.append('accessKey', config.ak)
          formData.append('policy', basePolicy)
          formData.append('signature', signature)
          formData.append('file', file.file)
          Axios.post(config.endpoint, formData, {
            baseURL: '',
            headers: { 'content-type': 'multipart/form-data;' }
          }).then(res => {
            debugger
          })
        },
        formate(time, fmt) {
          var o = {
            'M+': time.getMonth() + 1, //月份
            'd+': time.getDate(), //
            'h+': time.getHours(), //小时
            'm+': time.getMinutes(), //
            's+': time.getSeconds(), //
            'q+': Math.floor((time.getMonth() + 3) / 3), //季度
            S: time.getMilliseconds() //毫秒
          }
          if (/(y+)/.test(fmt))
            fmt = fmt.replace(
              RegExp.$1,
              (time.getFullYear() + '').substr(4 - RegExp.$1.length)
            )
          for (var k in o)
            if (new RegExp('(' + k + ')').test(fmt))
              fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length == 1
                  ? o[k]
                  : ('00' + o[k]).substr(('' + o[k]).length)
              )
          return fmt
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    </style>
  • 相关阅读:
    弹出的iframe 表单无法获取焦点
    记录IE的两则BUG
    manifest 在移动端的应用实验
    [hover 状态图片变小] 淘宝的一个小用户体验
    使用 JSONP 的几点注意
    Apple在线商店iphone5, ipad mini到货提醒 邮件
    关于弹窗中的事件多次执行
    zen coding 插件使用实践
    hadoop系列整理Spark
    hadoop系列整理HBase
  • 原文地址:https://www.cnblogs.com/tiandi0808/p/11887689.html
Copyright © 2011-2022 走看看