SpringBoot使用阿里OSS实现文件云存储的方法

 更新时间:2020年10月28日 10:11:27   作者:溪源的奇思妙想  
这篇文章主要介绍了SpringBoot使用阿里OSS实现文件云存储,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

我们在项目中经常会使用到图片或者文档资源,一般来说如何这类文件比较少的时候我们可以直接存在在服务器中,但是如果一旦这些文件到达一定数量的时候如果在放在应用服务器必然会影响应用服务器的性能,并且有时候这些图片资源也要直接用在前端显示当中,所以放在应用服务器也是不妥的。一些比较大的互联网公司可能会使用一些分布式文件系统来达到存储文件的目的,但这种方式门槛过高。如何找到一个合适且性价比高的文件存储方式呢?那么不得不说的就是对象存储服务OSS.

FastDFS分布式文件系统可参考我的博客:FastDFS分布式文件系统

正文

对象存储服务

对象存储服务OSS):是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件:

  • OSS可用于图片、音视频、日志等海量文件的存储。
  • 各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。
  • OSS支持流式写入和文件写入两种方式。

简单地来说,我们通过OSS可以避免在服务器中存储大量的文件、图片等资源增加服务器的IO的读写带宽。

在这里插入图片描述

SpringBoot使用阿里OSS实现文件云存储 前期准备

第一步:在阿里云商城购买对象存储服务

在这里插入图片描述

第二步:在阿里云控制台配置AccessKey

在这里插入图片描述

代码部分

maven依赖

<!--oss对象关系存储-->
<dependency>
 <groupId>com.aliyun.oss</groupId>
 <artifactId>aliyun-sdk-oss</artifactId>
 <version>3.5.0</version>
</dependency>

<!--apache comment tools-->
<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.4</version>
</dependency>

<!--提供文件上传下载-->
<dependency>
 <groupId>commons-fileupload</groupId>
 <artifactId>commons-fileupload</artifactId>
 <version>1.3.3</version>
</dependency>

application.properties:配置类

##basic setting
server.port = 8080
server.address =127.0.0.1

# 解除文件大小限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

OssManagerUtil.java:阿里OSS工具类

/**
 * 阿里Oss对象存储工具类
 */
public class OssManagerUtil {

 private static String endpoint = “oss中获取的oss公网路径";
 private static String accessKeyId = “自己在阿里云申请的accessKeyId";
 private static String accessKeySecret = "自己在阿里云申请的accessKeySecret";
 private static String bucket = "bucket名称";


 private static OSS client;


 static {
 client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
 }


 /**
 * 上传图片
 *
 * @param fileName 图片名称,图片名称包括文件夹名称和“/”
 * @param length 图片大小
 * @param content 输入流
 */
 public static String uploadImage(String fileName, long length, InputStream content) {
 uploadBucketImage(bucket, fileName, length, content);
 return "https://" + bucket + "." + endpoint + "/" + fileName;
 }


 /**
 * 上传文件
 *
 * @param bucket 存储空间名
 * @param fileName 文件名(包括文件夹名称和“/”)
 * @param length 流的长度
 * @param content 输入流
 */
 public static void uploadBucketImage(String bucket, String fileName, long length, InputStream content) {
 // 创建上传Object的Metadata
 ObjectMetadata meta = new ObjectMetadata();
 // 必须设置ContentLength
 meta.setContentLength(length);
 // 上传Object.
 client.putObject(bucket, fileName, content, meta);
 }


 /**
 * 删除文件
 *
 * @param fileName 文件名称,图片名称包括文件夹名称和“/”
 */
 public static boolean delShopImage(String fileName) {
 //判断文件是否存在
 boolean exist = client.doesObjectExist(bucket, fileName);
 //文件不存在删除失败
 if (!exist) {
 return false;
 }
 //执行删除
 client.deleteObject(bucket, fileName);
 return true;
 }


 /**
 * 获得上传文件后url链接
 *
 * @param fileName 文件名(包括文件夹名称和“/”)
 * @return
 */
 public static String getUrl(String fileName) {
 // 设置URL过期时间为10年 3600l* 1000*24*365*10
 Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
 // 生成URL
 URL url = client.generatePresignedUrl(bucket, fileName, expiration);
 if (url != null) {
 return url.toString();
 }
 return null;
 }

 /**
 * 创建存储空间
 *
 * @param bucketName 新建存储空间默认为标准存储类型,私有权限。
 * @return
 */
 public static void crateBucket(String bucketName) {
 // 新建存储空间默认为标准存储类型,私有权限。
 client.createBucket(bucketName);
 }
}

验证

测试接口:文件上传

/**
 * 文件上传到阿里oss
 */
@PostMapping("/uploadFiletoOss")
@ApiOperation(value = "文件上传到阿里oss")
public ResponseResult uploadFiletoOss(@RequestParam("file")MultipartFile file)throws IOException{
 String fileName = file.getOriginalFilename();
 String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
 fileName = UUID.randomUUID().toString().replace("-", "") + "." + suffix;
 String url = OssManagerUtil.uploadImage(fileName,file.getInputStream().available(),file.getInputStream());
 return ResponseResult.success(url);
}

访问测试接口:

在这里插入图片描述

打开接口返回的OSS在线文件URL,得到在线文件:

源码

项目源码可从的我的github中获取:github源码地址

到此这篇关于SpringBoot使用阿里OSS实现文件云存储的文章就介绍到这了,更多相关SpringBoot文件云存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java字符串拼接与性能分析详解

    java字符串拼接与性能分析详解

    在JAVA中拼接两个字符串的最简便的方式就是使用操作符”+”。如果你用”+”来连接固定长度的字符串,可能性能上会稍受影响,但是如果你是在循环中来”+”多个串的话,性能将指数倍的下降,下面我们分析一下JAVA字符串拼接的性能
    2014-01-01
  • Spring Boot 教程之创建项目的三种方式

    Spring Boot 教程之创建项目的三种方式

    这篇文章主要分享了Spring Boot 教程之创建项目的三种方式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Spring @Scheduled的坑及解决

    Spring @Scheduled的坑及解决

    这篇文章主要介绍了Spring @Scheduled的坑及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Spring中的依赖注入DI源码详细解析

    Spring中的依赖注入DI源码详细解析

    这篇文章主要介绍了Spring中的依赖注入DI源码详细解析,Spring的依赖注入(Dependency Injection,DI)是Spring框架核心的一部分,它是实现控制反转(Inversion of Control,IoC)的一种方式,需要的朋友可以参考下
    2023-11-11
  • SpringMVC访问静态资源的三种方式小结

    SpringMVC访问静态资源的三种方式小结

    这篇文章主要介绍了SpringMVC访问静态资源的三种方式小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Java实现五子棋游戏单机版(1.0)

    Java实现五子棋游戏单机版(1.0)

    这篇文章主要为大家详细介绍了Java实现五子棋游戏单机版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 解决Required request body is missing错误的问题

    解决Required request body is missing错误的问题

    这篇文章主要介绍了解决Required request body is missing错误的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java MongoDB实现REST过程解析

    Java MongoDB实现REST过程解析

    这篇文章主要介绍了Java MongoDB实现REST过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 详解Java语言中的抽象类与继承

    详解Java语言中的抽象类与继承

    这篇文章主要为大家详细介绍了Java语言中的抽象类与继承的相关资料,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的小伙伴快跟随小编一起了解一下
    2022-10-10
  • 微信公众号 网页授权登录及code been used解决详解

    微信公众号 网页授权登录及code been used解决详解

    这篇文章主要介绍了微信公众号 网页授权登录及code been used解决详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论