因为项目最近想把七牛的图片转换到阿里OSS,所以就研究了一下, 整理了一下,做了个小demo
其中最主要的一步是获取accessKeyId ,accessKeySecret ,securityToken 这几个key,然后通过这几个KEY生产一个OSS对象,OSS对象中有一些属性官网可能没有详细的介绍,需要自己去探究,比如secure:true表示为http还是https。
client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
region: 'oss-cn-hzfinance',
// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
accessKeyId: obj.accessKeyId,
accessKeySecret: obj.accessKeySecret,
// 从STS服务获取的安全令牌(SecurityToken)。
stsToken: obj.securityToken,
// 填写Bucket名称。
bucket: obj.bucket,
// 请求为HTTP还是HTTPS。
secure:true
});
然后是通过readFileAsBuffer将文件转换为二进制对象,这一步比较特殊,因为转换需要一定的时间,所以我们必须使用async 和 await , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,不然的话文件还没转换完就上传就gameover了
//将文件转为blob类型
function readFileAsBuffer(file) {
const reader = new FileReader();
return new Promise((resolve, reject) => {
reader.readAsDataURL(file);
reader.onload = function(e) {
const base64File = reader.result.replace(/^data:\w+\/\w+;base64,/, "");
resolve(new