vue 百度云上传文件PostObject
百度云上传文件 API(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的更多相关文章
- vue 阿里云上传组件
vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...
- (转载)基于Bash命令行的百度云上传下载工具
原文链接:http://hi.baidu.com/meoow/item/aef5814bbd5be3e1bcf451e9 这是我根据百度云PCS的API写的一个基于bash的命令行工具, 使用了cur ...
- 关于vue使用form上传文件
在vue中使用form表单上传文件文件的时候出现了一些问题,获取文件的时候一直返回null, 解决之后又出现发送到后台的file文件后台显示为空,解决源码 <template> <d ...
- OSS阿里云上传文件 前端js下载url跨域问题
场景: 1.后端上传文件至阿里云OSS,返回得到一个URL. 2.前端用这个URL下载文件,ajax请求异常:No 'Access-Control-Allow-Origin' header is pr ...
- vue.js异步上传文件前后端代码
上传文件前端代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...
- vue中用ajax上传文件
直接上代码 <input class="file-btn" type="file" @change="uploadCompany($event) ...
- 使用vue+iview实现上传文件及常用的下载文件的方法
首先说明一下,我们这次主要用的还是iview的upload上传组件,下面直接上代码 <Upload ref="upload" multiple='true' //是否支持多文 ...
- VUE -- 用组件上传文件和用xmlrequest上传
xmlrequest: sendForm(str, types) { var form = this.$refs.ipas_form; var oOutput = document.querySele ...
- vue + axios + formdata 上传文件带参数的爬坑之路
submitForm(event) { let formData = new FormData() formData.append('name', this.name) formData.append ...
随机推荐
- Flutter -------- dio网络请求
dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API.FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时等... 1.添加依赖# d ...
- Nginx + Naxsi 打造建议WAF
--prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf ...
- flutter DateTime日期&时间选择器
import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'dart:async'; class ...
- openresty开发系列19--lua的table操作
openresty开发系列19--lua的table操作 Lua中table内部实际采用哈希表和数组分别保存键值对.普通值:下标从1开始 不推荐混合使用这两种赋值方式. local color={fi ...
- Qt获取时间戳作为图片名
Qt获取时间戳作为图片名 //保存图片 void SaveRealsenseImg() { QString picIndexName = dataSavePath; picIndexName.appe ...
- 【Java】分布式自增ID算法---雪花算法 (snowflake,Java版)
一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式.UUID.雪花算法. 方案一,通过中间件方式,可以是把数据库或者redis缓存作为媒介,从中间件获取ID.这种呢,优点是可以体现全局的递增 ...
- k8s-基础环境配置(六)
hostname配置1)修改主机名hostnamectl set-hostname xxx2)加入主机映射vim /etc/hosts……关闭selinuxsed -i '/^SELINUX/s/=. ...
- 毫无PS痕迹 你的第一本Photoshop书 完整版
毫无PS痕迹 你的第一本Photoshop书 目录 <毫无PS痕迹-你的本Photoshop书>全书分为四大部分: 第1.2章讲解色彩和图像的原理与基础知识要点. 第3至11章全面讲解了使 ...
- 关于spring项目报错:找不到元素 'beans' 的声明的解决办法
@参考文章 首先是spring.xml中引用地址错误,部分http://***写成https://***了. 其次是spring.xml中引入的版本不对,我用的4.1.3的,直接写 http://ww ...
- Python第一阶段01
1.变量: name = "sisi" print(name) age = print(age) 2.常量: PIE = 3.1415926 3.注释: # password = ...