1. 首页

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