解决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文件跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring AI实现智能聊天模型

    Spring AI实现智能聊天模型

    通过本文的介绍,我们深入了解了Spring AI项目的优势和特性,以及在实际应用中的快速实战示例,Spring AI作为一个高度抽象化的人工智能应用程序开发框架,为开发者提供了便捷的模型支持、灵活的功能模块交换和优化能力
    2024-11-11
  • Java并发编程之常用的多线程实现方式分析

    Java并发编程之常用的多线程实现方式分析

    这篇文章主要介绍了Java并发编程之常用的多线程实现方式,结合实例形式分析了java并发编程中多线程的相关原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • SpringBoot定时调度之Timer与Quartz详解

    SpringBoot定时调度之Timer与Quartz详解

    Java 中常用的定时调度框架有以下几种:Timer、ScheduledExecutorService、Spring Task和Quartz,本文主要来和大家讲讲他们的具体使用,需要的可以参考一下
    2023-06-06
  • 总结Java常用到的六个加密技术和代码

    总结Java常用到的六个加密技术和代码

    大家要记住现代密码学最重要的原则柯克霍夫原则:数据的安全基于密钥而不是算法的保密。也就是说即使密码系统的任何细节已为人悉知,只要密匙未洩漏,它也应是安全的。这篇文章给大家介绍了6个常用的加密技术和代码。
    2016-07-07
  • Sentinel 断路器在Spring Cloud使用详解

    Sentinel 断路器在Spring Cloud使用详解

    Sentinel是阿里巴巴开源的一款微服务流量控制组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性,本文介绍Sentinel 断路器在Spring Cloud使用,感兴趣的朋友一起看看吧
    2025-02-02
  • Spring AOPr如何打通两个切面之间的通信

    Spring AOPr如何打通两个切面之间的通信

    本文主要介绍了Spring AOPr如何打通两个切面之间的通信,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • 详解Maven多模块打包遇到的问题解决方法

    详解Maven多模块打包遇到的问题解决方法

    这篇文章主要介绍了详解Maven多模块打包遇到的问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java OpenCV4.0.0实现实时人脸识别

    Java OpenCV4.0.0实现实时人脸识别

    这篇文章主要为大家详细介绍了Java OpenCV4.0.0实现实时人脸识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • SpringBoot+Vue.js实现前后端分离的文件上传功能

    SpringBoot+Vue.js实现前后端分离的文件上传功能

    这篇文章主要介绍了SpringBoot+Vue.js实现前后端分离的文件上传功能,需要的朋友可以参考下
    2018-06-06
  • Java中常用数据类型的输入输出详解

    Java中常用数据类型的输入输出详解

    本文主要介绍了Java中几个常用的数据类型是如何输入和输出的,例如:Char型、int型、double型、数组、字符串等,对我们学习java有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习学习
    2021-12-12

最新评论