iview上传(upload)组件添加阿里云oss直传功能
最近上手的一个商城,里面用的图片上传功能是从web端传到服务器的,再从服务器中转到阿里云oss,这样的话有点浪费服务器的带宽,增加服务器压力
就改了一下,把原来的图片上传改为sts直传阿里云,传上去后,再把图片的url传到服务器保存,就不用经过服务器中传图片文件了
把代码稍微列一下,
首先加一个单独的封装文件.aliyun.js,在这之前,请先npm install ali-oss 加载阿里的包
import OSS from "ali-oss";
//aliyun oss上传
export const AliyunUpload = (file, info) => {
info = JSON.parse(info)
console.log(info)
let oss = new OSS({
region: info.region, //节点,oss-cn-beijin
//下面的三个都是服务器sts获取授权后的信息
accessKeyId: info.accessKeyId,
accessKeySecret: info.accessKeySecret,
stsToken: info.stsToken,
bucket: info.bucket //bucket里面
})
// 文件名称
let fileName = file.name;
// 文件后缀
let suffix = fileName.split('.').pop().toLowerCase();
let rand=Math.floor(Math.random () * 899) + 100 //999内的随机数
// 按照时间戳生产key
let t=new Date().getTime()
//拼接字符串
let newFileName ="pic/"+ t +rand + "." + suffix;
//let res = oss.put(newFileName,file);
return oss.multipartUpload(newFileName, file)
}然后再到上传组件里面的方法调用,在这之前,先获取一下阿里云sts的token等信息保存进cookie里面去了,所以这里的方法直接调用getCookies里面
:before-upload="beforeUpload" //上传前调用beforeUpload方法
//引入aliyun包
import { AliyunUpload } from "@/libs/aliyun";
beforeUpload(file) {
//这个应该换到缓存里面,在这之
let info = getCookies("alists");
AliyunUpload(file, info).then((res) => {
if (res.res.status == 200) {
let url=res.res.requestUrls[0]
let imginfo = {
name: res.name.replace(/pic\//, ""),
realname:file.name,
filetype:1,//文件类型,1图片
imgtype:3,//阿里云
attdir: url.replace(/http:/, "https:"),//图片的绝对地址.http替换成https
sort:this.treeId
};
//图片上传到阿里云后,保存到服务器,并且返回最新的图片列表,再调用filedd方法处理新数据
upImgApi(imginfo).then(resinfo=>{
this.filedd(resinfo.data.list)
this.total = res.data.count;
console.log(resinfo)
})
} else {
this.$Message.error("上传错误");
}
});
return false;
},其中用golang的获取sts信息,在这之前,请先go get "github.com/aliyun/alibaba-cloud-sdk-go/services/sts"
endpoint := "cn-beijing"
bucket := "hua121"
rolearn := "acs:ram::124511:role/aliyunoss"
accessKeyId := "LTAI4G2R2m11r4TFYg"
accessKeySecret := "gb6G9sWSY2Zqk124221SKWU3GNxi"
//构建一个阿里云客户端, 用于发起请求。
&n
本文来自投稿,不代表本人立场,如若转载,请注明出处;如有问题您可以发邮件到:itlun@qq.com