百度云上传文件 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="beforeRead" />
</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>

vue 百度云上传文件PostObject的更多相关文章

  1. vue 阿里云上传组件

    vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...

  2. (转载)基于Bash命令行的百度云上传下载工具

    原文链接:http://hi.baidu.com/meoow/item/aef5814bbd5be3e1bcf451e9 这是我根据百度云PCS的API写的一个基于bash的命令行工具, 使用了cur ...

  3. 关于vue使用form上传文件

    在vue中使用form表单上传文件文件的时候出现了一些问题,获取文件的时候一直返回null, 解决之后又出现发送到后台的file文件后台显示为空,解决源码 <template> <d ...

  4. OSS阿里云上传文件 前端js下载url跨域问题

    场景: 1.后端上传文件至阿里云OSS,返回得到一个URL. 2.前端用这个URL下载文件,ajax请求异常:No 'Access-Control-Allow-Origin' header is pr ...

  5. vue.js异步上传文件前后端代码

    上传文件前端代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...

  6. vue中用ajax上传文件

    直接上代码 <input class="file-btn" type="file" @change="uploadCompany($event) ...

  7. 使用vue+iview实现上传文件及常用的下载文件的方法

    首先说明一下,我们这次主要用的还是iview的upload上传组件,下面直接上代码 <Upload ref="upload" multiple='true' //是否支持多文 ...

  8. VUE -- 用组件上传文件和用xmlrequest上传

    xmlrequest: sendForm(str, types) { var form = this.$refs.ipas_form; var oOutput = document.querySele ...

  9. vue + axios + formdata 上传文件带参数的爬坑之路

    submitForm(event) { let formData = new FormData() formData.append('name', this.name) formData.append ...

随机推荐

  1. windows中kill端口为8080的进程(或子进程)

    1.netstat -aon|findstr "8080" 查出8080端口被9436进程占用 2.查看PID对应的进程 tasklist|findstr "9436&q ...

  2. seekBar拖动滑块

    中秋节学习,, 通过拖动滑块,改变图片的透明度 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  3. 实战二:LoadRunner创建一个测试脚本

    问题一:执行脚本浏览器不能自动启动??? 原因:loadrunner11只支持IE9以下浏览器和火狐低版本浏览器 解决办法:1.IE浏览器取消勾选[启用第三方浏览器扩展]启动IE,从[工具]进入[In ...

  4. Flutter修改应用图标及图标

    应用名称是需要在 Android 和 iOS 中分别调整的:Android 是在 AndroidManifest.xml 中修改:iOS 则是在 Info.plist 中修改的: 如果需要更改应用的 ...

  5. pip 安装指定版本

    pip在安装包的时候可以不需要从网上下载,以windows的scipy为例 pip install scipy==0.15.1 以上表示安装0.15.1版本的scipy,这里用”==”接版本,如果权限 ...

  6. k8s-基础环境配置(六)

    hostname配置1)修改主机名hostnamectl set-hostname xxx2)加入主机映射vim /etc/hosts……关闭selinuxsed -i '/^SELINUX/s/=. ...

  7. tensor&ndarray&int、float

    (1)如果tensor只有一个元素,然后转换成int或者float类型的时候直接用int()或者float()就可以了: (2)如果tensor含有多个元素,转换成ndarray时就要用x.detac ...

  8. HTML布局排版4三部分测试图片页面

    布局样式有前面的三个相关博文介绍: 该页面因为方便以后自己用,所以JS并没有判断输入内容为空或不对的情况.页面本身特点:1.页头的透明图,方便不更换底层渐变的情况下,更换图片2.浏览器宽度改变,中间b ...

  9. LintCode: coins in a line I

    有 n 个硬币排成一条线.两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止.拿到最后一枚硬币的人获胜. 请判定 第一个玩家 是输还是赢? n = 1, 返回 true.n = 2, ...

  10. AI - TensorFlow - 示例04:过拟合与欠拟合

    过拟合与欠拟合(Overfitting and underfitting) 官网示例:https://www.tensorflow.org/tutorials/keras/overfit_and_un ...