百度云上传文件 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. Android 关于selector中item顺序的问题

    selector的item从上到下是按照匹配原则来改变状态的,一旦匹配到某个item的状态,就不会继续往下匹配了. https://blog.csdn.net/l403040463/article/d ...

  2. Linux 操作系统 & High Tech

    分享10大白帽黑客专用的 Linux 操作系统 - 51CTO.COMhttp://os.51cto.com/art/201905/597156.htm Ubuntu 创始人谈论为什么 Linux 在 ...

  3. 二、HTTP请求

    一.测试对象:v2ex的api 文档:https:www.v2ex.com/p/7vpTEc53 api:https://www.v2ex.com/api/topic/hot.json 最热主题:相当 ...

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

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

  5. CNN中计算量FLOPs的计算

    1.FLOPs的概念:全称是floating point operations per second,意指每秒浮点运算次数,即用来衡量硬件的计算性能:在CNN中用来指浮点运算次数: 2.计算过程: 如 ...

  6. 前端研究CSS之内联元素块级化/区域大小/文字和图标的位置

    做了一天的小按钮基本都是文字+小图标的组合,问题挺多处理的不好,现在总结一下做个了断. //页面结构 <span class="b"> <a href=" ...

  7. 内存运行PE文件

    内存中运行文件 拿exe并在HxD或010中打开 - cntrl+a copy as C 粘贴到encrypt.cpp 编译并运行encrypt.cpp - 创建shellcode.txt 从shel ...

  8. Java学习,从入门到放弃(二)Linux配置mvn

    其实网上的教程很多,随便拿一个,比如:https://www.cnblogs.com/chuijingjing/p/10430649.html 但在实践过程中,发现可能需要将JAVA_HOME也加到 ...

  9. git的使用学习(一)git的简介和安装

    Git简介 Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制系统? 如果你用Microsoft Word写 ...

  10. 查看cpu核的相关信息

    查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 80 Intel(R) Xeon(R) CPU E7-4820 v3 ...