阿里云oss:是一个分布式的文件服务系统,可以进行图片(视频)的上传和下载
首先要有自己的阿里云账号,登录之后搜索对象存储oss
这个时候我们需要开通一下oss,开通之后进入oss控制台,然后需要创建Bucket(类似于文件夹,用于存储我们的图片等信息)
这个时候bucket列表里面就会有我们刚才创建的bucket:
那下面就使用springboot来整合oss,完成图片(视频)的上传和下载:
注意:调用oss也需要accessKey和secret
我们先看下官方提供的接口文档:
可以看到安装的话就是引入相关依赖即可:
初始化的相关代码也已经提供了:
其他步骤就不一一看了,有兴趣的可以自己去阿里云官方查看文档,下面就开始整合:
新建一个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代码:
然后是service接口的定义:
最后是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)上传图片测试:
可以看到上传成功,并且返回上传后的图片路径:
https://hanansheng.oss-cn-hangzhou.aliyuncs.com/hy.jpg.crdownload
浏览器访问可以看到是可以访问得到的:
并且oss里面也有了上传的图片信息:
(2)上传视频测试:
返回上传后视频地址:
https://hanansheng.oss-cn-hangzhou.aliyuncs.com/2022/03/15/20053aa41a494b5eb2b68dabb713188714.mp4
浏览器访问:
并且阿里云oss里面也是有的相关信息:
由于代码逻辑里面我以当前日期为文件夹来存储,所以如下:
自此,简单上传中的流式上传算是完成了,相关的demo已经上传csdn,有需要的可以下载: