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文件云存储内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot整合阿里云OSS对象存储服务的实现

    今天来整合一下SpringBoot和阿里云OSS对象存储服务. 一.配置OSS服务 先在阿里云开通对象存储服务,拿到AccessKeyId.AccessKeySecret. 创建你的bucket(存储空间),相当于一个一个的文件夹目录.按业务需求分类存储你的文件,图片,音频,app包等等.创建bucket是要选择该bucket的权限,私有,公共读,公共读写,按需求选择.创建bucket时对应的endpoint要记住,上传文件需要用到. 可以配置bucket的生命周期,比如说某些文件有过期时间的,

  • SpringBoot集成阿里云OSS图片上传

    简述 最近做的公司项目,图片比较多,不想给其存储到自己服务器上,就买了阿里云的OSS服务器来哦进行存储,其实集成第三方平台,一般没什么难度,当然,你要仔细看对方的API文档,这篇主要说一下个人集成OSS的过程 步骤 1.pom.xml中添加OSS的SDK <!-- 图片上传 SDK 阿里云oss --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-os

  • 详解SpringBoot上传图片到阿里云的OSS对象存储中

    启动idea创建一个SpringBoot项目 将上面的步骤完成之后,点击下一步创建项目 创建完成之后修改pom.xml文件,添加阿里云oss依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional&g

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

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

  • springboot 多环境配置 yml文件版的实现方法

    关于 dev.sit.uat.prod多环境切换的配置 最近小伙伴跟杨洋我聊到了多环境配置的问题,网上的大部分教程都是copy的,很多文章根本就没法用,小伙伴很苦恼啊,于是心(yu)地(shu)善(lin)良(feng)的杨洋回去写了个demo给了小伙 , 那么这边文章呢,正好给大家讲解下关于springboot 的多环境配置 科普时间:  dev.sit.uat.prod是什么呢? 首先给刚接触的小伙伴们科普下含义 dev--本地开发环境: sit--测试环境: uat--准生产环境: pro

  • springboot工程jar包部署到云服务器的方法

    首先,springboot在这里不多做介绍了,关于怎么打成jar包,我相信凡是用过的同学都知道吧! 然后就是将jar包上传到云服务器了,这个有好些工具的,博主在这里也不多做说明了! 咱们还是直奔主题吧.... 运行命令:java -jar xxx.jar,然后springboot工程的内置tomcat就开启了,项目已经启动,接下来你就可以访问了. 感觉一切ok,其实你已经掉到坑里了... 怎么回事呢? 当你关闭当前的xshell 命令界面时,再次访问就失效了,why? why? why? 这是因

  • SpringBoot通过yml和xml文件配置日志输出方法

    SpringBoot中默认使用Logback进行日志输出,可以同时使用SpringBoot框架的配置文件application.yml或是通过logback的配置文件logback.xml进行配置. 通过application.yml配置 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 Lo

  • SpringBoot整合阿里云OSS对象存储服务实现文件上传

    1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文档,这个获取值本身就不难. 重点:记下你的AccessKey ID.AccessKey Secret以及你刚才创建的Buacket名字BucketName. 2. 配置: 在pom里引入oss要用的依赖 <dependency> <groupId>com.aliyun.oss</

  • springboot操作阿里云OSS实现文件上传,下载,删除功能

    参考资料:Java操作阿里云OSS操作官方文档 学会看文档,并实际运用也是一种习惯和技能 下面就来简单入门一下,用当下比较热门的Springboot 去操作阿里云OSS文件存储. 1.需求 (没踩过下面的坑的小伙伴可以直接跳过这一章节) 问题简述 首先,我在之前自己做一些开源小项目案例中遇到一些文件上传下载的问题,比如在本机文件上传和下载都可以正常使用,通过将文件上传到Springboot项目的根目录下,按日期分文件夹,文件访问也很方便,可以直接返回文件相对路径地址,并直接可以访问. 问题 然而

  • springboot整合阿里云oss上传的方法示例

    OSS申请和配置 1. 注册登录 输入网址:https://www.aliyun.com/product/oss 如果没有账号点击免费注册,然后登录. 2.开通以及配置 点击立即开通 进入管理控制台 第一次使用会出现引导,按引导点击"我知道了",然后点击创建Bucket. 如果没有存储包或流量包点击购买. 点击确定,返回主页面,出现该页面,点击我知道了 将EndPoint记录下来,方便后期添加到我们项目的配置文件中 创建 AccessKeyID 和 AccessKeySecret 点击

  • 阿里云存储服务OSS基本概念

    对象存储(Object Storage Service,简称OSS),是阿里云提供的海量.安全和高可靠的云存储服务.存储容量和处理能力的弹性扩展,按量付费真正使您专注于核心业务.您还可以方便的同其他云产品搭配使用,广泛的应用于海量数据存储与备份,数据加工与处理,内容加速分发,业务数据挖掘分析等多种业务场景 基本概念 Object 在OSS中,用户的每个文件都是一个Object,单个文件可支持5TB.Object包含key.data和user meta.key是Object名,user meta是

  • Vue.js上传图片到阿里云OSS存储的方法示例

    如何在VueJS使用阿里云存储上传图片? 什么是OSS呢? 其实按照官网的解释就是->>阿里云对象存储服务(Object Storage Service) 在实际开发中,公司可能会用到OSS随时来存储一些数据,比如像文本.图片.音频和视频等在内的各种非结构化数据文件,恰好,在做项目的时候,刚好用到了OSS存储,对于我这个萌新,从来没用过,那么我们先来看看文档,看看是怎么一回事~看看前端在VueJS的环境下是如何上传OSS的 (1)首先,打开官网-----https://www.aliyun.c

随机推荐