阿里云OSS上传下载跨域问题

OSS文件传输

使用OSS进行上传/下载操作时,时常会遇到跨域问题。
其表现为,直接通过浏览器,可以直接访问已经存储在OSS中得文件地址并下载,但是通过代码却会报跨域问题.

解决办法:登录阿里云OSS控制台,设置允许跨域.(图文详解在文尾)

示例前端代码

前端vue项目示例


  1. 下载
    
    const scoreXml = await axios.get(scoreUrl);
  1. 上传
<template>
 <upload-component @click="fnUploadRequest"/>
</template>


---

<script>
import OSS from 'ali-oss';


data:(){
	return {
		// 此配置来源于阿里云控制台
		OSSConfig: {
		    region: 'oss-cn-zhangjiakou',
		    accessKeyId: 'XFAIB4HUKbYUJKG',
		    accessKeySecret: 'UIjd89fwj9FFHW9jwf9JW8F',
		    bucket: 'ifredomBucket'
  		};
	}
},
methods:{
    async fnUploadRequest(option) {
      const client = new OSS(this.OSSConfig);

      try {
        const file = option.file;
        const OSSfileName = this.packFileName(option.file.name);
        const result = await client.put(OSSfileName, new Blob([file]));

        if (result.res.statusCode === 200) {
          return result;
        } else {
          option.onError('上传失败');
        }
      } catch (error) {
        console.error(error);
        option.onError('上传失败,请重试');
      }
    },
    // 将文件名格式化为: 文件原名_日期.后缀
    packFileName(name) {
      if (!name) {
        console.log('require at least one parameter is needed');
        return;
      }
      const point = name.lastIndexOf('.');
      const suffix = name.substr(point);
      const fileName = name.substr(0, point);
      const date = this.formatDate(new Date(), 'yyyyMMddHHmm');
      const OSSfileName = `${fileName}_${date}${suffix}`;
      return OSSfileName;
    },
	/**
	 * 将日期格式化成指定格式的字符串
	 * @param date 要格式化的日期,不传时默认当前时间,也可以是一个时间戳
	 * @param fmt 目标字符串格式,支持的字符有:y,M,d,q,w,H,h,m,S,默认:yyyy-MM-dd HH:mm:ss
	 * @returns 返回格式化后的日期字符串
	 */
	formatDate(date, fmt) {
	  date = date === undefined ? new Date() : date;
	  date = typeof date === "number" ? new Date(date) : date;
	  fmt = fmt || "yyyy-MM-dd HH:mm:ss";
	  var obj = {
	    y: date.getFullYear(), // 年份,注意必须用getFullYear
	    M: date.getMonth() + 1, // 月份,注意是从0-11
	    d: date.getDate(), // 日期
	    q: Math.floor((date.getMonth() + 3) / 3), // 季度
	    w: date.getDay(), // 星期,注意是0-6
	    H: date.getHours(), // 24小时制
	    h: date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 12小时制
	    m: date.getMinutes(), // 分钟
	    s: date.getSeconds(), // 秒
	    S: date.getMilliseconds() // 毫秒
	  };
	  var week = ["天", "一", "二", "三", "四", "五", "六"];
	  for (var i in obj) {
	    fmt = fmt.replace(new RegExp(i + "+", "g"), function(m) {
	      var val = obj[i] + "";
	      if (i === "w") return (m.length > 2 ? "星期" : "周") + week[val];
	      for (var j = 0, len = val.length; j < m.length - len; j++) {
	        val = "0" + val;
	      }
	      return m.length === 1 ? val : val.substring(val.length - m.length);
	    });
	  }
	  return fmt;
	}
}

</script>

控制台创建跨域规则

登录阿里云 — 点击进入对象存储OSS

  1. 进入Bucket 列表

  2. 设置–权限管理跨域设置

  3. 创建一条规则,设置内容如图: 两个星号/一个Etag

在这里插入图片描述

--------------如果文章对你有用,请右上角点赞,谢谢-------------

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于ElementUI和阿里云OSS的分片上传视频跨域问题,您可以通过配置CORS规则来解决。 首先,在阿里云OSS的控制台中,找到您的存储空间,并进入"域名管理"页面。然后,点击您要使用的域名,进入该域名的详细设置页面。 在页面下方的"CORS配置"部分,点击"添加规则"按钮,然后按照以下步骤进行配置: 1. 在"允许的来源"中填写您的网站域名,例如:"http://example.com"。 2. 在"允许的方法"中选择"GET"、"PUT"、"POST"、"DELETE"、"HEAD",这些方法是常用的上传操作所需要的。 3. 在"允许的头部信息"中填写"Content-Type",这是常用的上传请求头部信息。 4. 在"暴露的头部信息"中填写"ETag"和"Content-Length",这些是常用的响应头部信息。 完成上述配置后,保存并退出设置页面。 接下来,在您使用ElementUI进行文件上传的代码中,需要在请求头中添加一些特定的头部信息,以允许跨域请求。具体代码如下: ```javascript this.$refs.upload.uploadFiles.forEach(file => { file.headers = { 'Access-Control-Allow-Origin': 'http://example.com', 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, HEAD', 'Access-Control-Allow-Headers': 'Content-Type' }; }); ``` 请将上述代码中的"http://example.com"替换为您的网站域名。 通过以上配置和代码修改,您应该能够解决ElementUI和阿里云OSS分片上传视频的跨域问题。希望对您有帮助!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值