使用阿里云oss上传文件到文件服务器

该博客介绍了如何在阿里云OSS(对象存储服务)上实现文件上传,同时不依赖回调获取文件信息。通过`util.ossUpload`函数展示了上传流程,包括文件名处理、时间戳生成的key以及使用`ali-oss`库进行上传。此外,还详细阐述了如何利用本地缓存的签名信息初始化OSS客户端,并在缓存过期时从后端获取新的签名。整个过程确保了在没有回调的情况下也能获取上传后的文件路径。
摘要由CSDN通过智能技术生成

上传文件到阿里云文件存储服务器

阿里云上传提供回调方法,可以回调上传后的文件信息, 但是我们后端没有签名的时候不让回调获取信息,故本文使用无回调方式获取上传后的文件路径

import { getAliyunOssSTSAK ,getDirectOssSTSAK} from '@/api/common/ossupload';
import OSS from "ali-oss";

let util = {};
//上传方法
util.ossUpload = async function (prefix, file,index) {
  let ossClient = await util.ossClient();
  try {
      if (!prefix) {
          prefix = "";
      }
      // 文件名称
      let fileName = file.name;
      if ( index < 10) {
          index = "0" + index;
      }
      // 文件后缀
      let suffix = fileName.split('.').pop().toLowerCase();
      // 按照时间戳生产key
      let newFileName = prefix + util.guid() +index+ "." + suffix;
      let res = await ossClient.put(newFileName, file);
      return res;
  } catch (e) {
      console.log(e);
  }
}

// 初始化阿里云上传控件
util.ossClient = async function () {
    //取出存储的签名信息
    let ossSTSAK = window.ossSTSAK;
    let expiration = ossSTSAK && ossSTSAK.expiration ? ossSTSAK.expiration : "1979-01-01 00:00:00";
    expiration = expiration.replace("-", "/");
    expiration = new Date(Date.parse(expiration));
    let currentTime = new Date();
    // 如果本地缓存缓存且缓存时间有效,则直接取本地缓存初始化上传控件
    if (currentTime < expiration) {
        return new OSS({
            region: 'oss-cn-shanghai',
            accessKeyId: ossSTSAK.accessKeyId,
            accessKeySecret: ossSTSAK.accessKeySecret,
            stsToken: ossSTSAK.securityToken,
            bucket: ossSTSAK.bucket
        });
    }
    // 从后端获取凭证
    let res = await getAliyunOssSTSAK();
    if (res.code != 200) {
        // 将上传品质保存到本地缓存
        console.log(res);
        return;
    }
    window.ossSTSAK = res.data
    return new OSS({
        region: 'oss-cn-shanghai',
        accessKeyId: res.data.accessKeyId,
        accessKeySecret: res.data.accessKeySecret,
        stsToken: res.data.securityToken,
        bucket: res.data.bucket
    });
}
// 格式化当前时间为YYYYMMDDHHSS格式
util.guid= function () {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0,
            v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值