解决springcloud阿里云OSS文件访问跨域问题的实现

 更新时间:2022年06月07日 14:58:16   作者:wu55555  
本文主要介绍了解决springcloud阿里云OSS文件访问跨域问题的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

引言

最近在高德地图中引用阿里云OSS存储的图片时,出现跨域访问问题,特此记录,以方便后续同学参考

解决

1、在阿里云OSS后台管理中,进入权限管理,进入跨域设置,添加跨域规则,设置来源为*

2、至此配置完成后访问图片还是会出现跨域问题,这是因为OSS文件默认会开启缓存,及后续访问的实际上是缓存的文件,这就会导致不能匹配到我们上述配置的跨域规则

于是我们需要将缓存禁用掉,如果文件就一两个的话,可以直接在后台中设置禁用缓存,将HTTP头中Cache-Control设置为no-cache

3、因为目前阿里云后台只支持单个文件的HTTP头设置,并不支持批量设置,所以到有多个文件或者后续上传的文件都不需要缓存时就不能满足了

那么我们如何来实现这个批量禁用缓存的需求呢。答案就是在上传文件到OSS的时候在请求头中设置Cache-Controlno-cache

首先上传阿里云OSS的接口是基于aliyun-sdk-oss依赖的

<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>

其次我们观察该依赖包提供的上传文件接口,会发现其中有一个方法可以设置ObjectMetadata

ObjectMetadata中是可以设置Header的

那么解决的方法就很清晰了,我们只需要在调用该文件上传put方法时,在ObjectMetadata中设置上我们需要的Header即可,参考代码如下:

    private final OSSClient ossClient;
    
    @PostMapping("/put-file-with-nocache")
	public PutObjectResult putFileWithNoCache(@RequestParam MultipartFile file) {
		String fileName = file.getOriginalFilename();
		ObjectMetadata metadata = new ObjectMetadata();
		// 取消文件缓存,文件每次都会从OSS服务器获取
		metadata.setHeader("Cache-Control", "no-cache");
		metadata.setHeader("Expires", "0");
		PutObjectResult bucketName = ossClient.putObject("bucketName", fileName, file.getInputStream(), metadata);
		return bucketName;
	}

之后通过该接口上传的图片就不会再有跨域问题了,我们在测试工具中调用访问该图片,也会发现其response中会多出一个cache-control: no-cache的响应头了。

 到此这篇关于解决springcloud阿里云OSS文件访问跨域问题的实现的文章就介绍到这了,更多相关springcloud OSS文件跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA中的打包Build Artifacts图文详解

    IDEA中的打包Build Artifacts图文详解

    当项目开发完毕,需要对外发布时,我们就会用到IDEABuild Artifacts功能,那么如果在idea中打包呢,这篇文章主要介绍了IDEA中的打包Build Artifacts详解,需要的朋友可以参考下
    2024-03-03
  • 浅谈java中为什么实体类需要实现序列化

    浅谈java中为什么实体类需要实现序列化

    下面小编就为大家带来一篇浅谈java中为什么实体类需要实现序列化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 对比Java中的Comparable排序接口和Comparator比较器接口

    对比Java中的Comparable排序接口和Comparator比较器接口

    Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
    2016-05-05
  • 关于Long和Integer相互转换方式

    关于Long和Integer相互转换方式

    这篇文章主要介绍了关于Long和Integer相互转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • java中每月等额与先息后本计算

    java中每月等额与先息后本计算

    一般信用贷款会提供两种还款方式:每月等额或者先息后本。每月等额,就是每月归还等同的部分本金和利息,你手里在使用的本金其实是逐月减少的。先息后本就是先还利息,到期归还本金。本文将介绍他们的实现方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • Java字母大小写转换的方法

    Java字母大小写转换的方法

    这篇文章主要为大家详细介绍了Java字母大小写转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Spring Boot Admin 监控指标接入Grafana可视化的实例详解

    Spring Boot Admin 监控指标接入Grafana可视化的实例详解

    Spring Boot Admin2 自带有部分监控图表,如图,有线程、内存Heap和内存Non Heap,这篇文章主要介绍了Spring Boot Admin 监控指标接入Grafana可视化,需要的朋友可以参考下
    2022-11-11
  • JavaMap两种遍历方式keySet与entrySet详解

    JavaMap两种遍历方式keySet与entrySet详解

    这篇文章主要介绍了JavaMap两种遍历方式keySet与entrySet,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • java实现异步回调返回给前端的方法示例

    java实现异步回调返回给前端的方法示例

    在Java中实现异步回调并将结果返回给前端,通常是在Web应用开发中处理耗时操作时所采用的技术手段,以避免阻塞HTTP请求线程并提高用户体验,本文就来介绍一下如何实现,感兴趣的可以了解一下
    2024-03-03
  • java中List集合及其实现类的方法详解

    java中List集合及其实现类的方法详解

    本篇文章给大家带来的内容是关于java中List集合及其实现类的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。下面我们就来学习一下吧
    2019-06-06

最新评论