阿里云oss:是一个分布式的文件服务系统,可以进行图片(视频)的上传和下载

首先要有自己的阿里云账号,登录之后搜索对象存储oss

springboot整合阿里云oss上传文件(图片或视频)_java

 springboot整合阿里云oss上传文件(图片或视频)_上传_02

这个时候我们需要开通一下oss,开通之后进入oss控制台,然后需要创建Bucket(类似于文件夹,用于存储我们的图片等信息)

springboot整合阿里云oss上传文件(图片或视频)_java_03

springboot整合阿里云oss上传文件(图片或视频)_阿里云_04

springboot整合阿里云oss上传文件(图片或视频)_spring_05 这个时候bucket列表里面就会有我们刚才创建的bucket:

springboot整合阿里云oss上传文件(图片或视频)_spring_06

 那下面就使用springboot来整合oss,完成图片(视频)的上传和下载:

注意:调用oss也需要accessKey和secret

springboot整合阿里云oss上传文件(图片或视频)_阿里云_07

 我们先看下官方提供的接口文档:

springboot整合阿里云oss上传文件(图片或视频)_云计算_08

springboot整合阿里云oss上传文件(图片或视频)_spring_09

可以看到安装的话就是引入相关依赖即可:

springboot整合阿里云oss上传文件(图片或视频)_spring_10 初始化的相关代码也已经提供了:

springboot整合阿里云oss上传文件(图片或视频)_云计算_11

 其他步骤就不一一看了,有兴趣的可以自己去阿里云官方查看文档,下面就开始整合:

新建一个springboot项目添加相关的依赖信息(由于我要使用swagger测试,因此也顺便加了一下swagger相关的依赖):


<!-- 阿里云oss依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>


然后配置文件里面配置如下所示:主要是阿里云oss相关配置信息和文件上传大小配置


## oss param config
aliyun.oss.endpoint=oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=xxxxxxxxxx
aliyun.oss.secret=xxxxxxxxxxxx
aliyun.oss.bucket=hanansheng
# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB


然后开始写controller代码:

springboot整合阿里云oss上传文件(图片或视频)_阿里云_12

 然后是service接口的定义:

springboot整合阿里云oss上传文件(图片或视频)_spring_13

最后是serviceImpl上传oss的代码:可以看到阿里云oss上传文件类型很多,这里我选择的是简单上传中的流式上传:

package com.example.ossboot.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.example.ossboot.service.FileService;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService {

@Value("${aliyun.oss.endpoint}")
private String endpoint;

@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;

@Value("${aliyun.oss.secret}")
private String secret;

@Value("${aliyun.oss.bucket}")
private String bucket;

@Override
public String upload(MultipartFile file) {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写
String endpoint = this.endpoint;
// 阿里云账号AccessKey
String accessKeyId = this.accessKeyId;
String accessKeySecret = this.secret;
// 填写Bucket名称
String bucketName = this.bucket;

try{
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流
InputStream inputStream= file.getInputStream();
String fileName=file.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-","");
fileName = uuid+fileName;

//按照当前日期,创建文件夹,上传到创建文件夹里面
// 2022/03/15/xx.jpg
String timeUrl = new DateTime().toString("yyyy/MM/dd");
fileName = timeUrl+"/"+fileName;
// 调用方法实现上传
ossClient.putObject(bucketName,fileName,inputStream);

// 关闭ossclient
ossClient.shutdown();

// 上传之后文件路径
String url="https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
}catch (IOException e){
e.printStackTrace();
return null;
}

}
}

是不是感觉很简单。下面我通过swagger测试一下:

(1)上传图片测试:

springboot整合阿里云oss上传文件(图片或视频)_java_14

 可以看到上传成功,并且返回上传后的图片路径:

https://hanansheng.oss-cn-hangzhou.aliyuncs.com/hy.jpg.crdownload

浏览器访问可以看到是可以访问得到的:

springboot整合阿里云oss上传文件(图片或视频)_阿里云_15

 并且oss里面也有了上传的图片信息:

springboot整合阿里云oss上传文件(图片或视频)_阿里云_16

 (2)上传视频测试:

springboot整合阿里云oss上传文件(图片或视频)_java_17

 返回上传后视频地址:

https://hanansheng.oss-cn-hangzhou.aliyuncs.com/2022/03/15/20053aa41a494b5eb2b68dabb713188714.mp4

 浏览器访问:

springboot整合阿里云oss上传文件(图片或视频)_上传_18


 并且阿里云oss里面也是有的相关信息:

由于代码逻辑里面我以当前日期为文件夹来存储,所以如下:

springboot整合阿里云oss上传文件(图片或视频)_云计算_19

springboot整合阿里云oss上传文件(图片或视频)_上传_20 

springboot整合阿里云oss上传文件(图片或视频)_云计算_21 

springboot整合阿里云oss上传文件(图片或视频)_上传_22  

自此,简单上传中的流式上传算是完成了,相关的demo已经上传