声明,之前用的某XX云,我推荐大家使用腾讯云COS: https://console.cloud.tencent.com/cos 本次使用的是腾讯云进行替换,所以大家看到文章如果有出现某XX云的,SDK等信息需要自行根据腾讯云文档进行替换即可
申请
开通之后的样子如下图:
点击管理控制台,进去之后, 点击立即开通,有个申请开通的按钮。
申请秘钥
Api 地址
地址:对象存储 快速入门-SDK 文档-文档中心-腾讯云 (tencent.com)
创建 service_upload 服务
修改 service_upload 服务的 pom.xml 引入依赖
代码语言:html复制<dependencies>
<!-- 阿里云oss依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!-- 日期工具类依赖 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
添加启动类并排除加载数据库相关信息
代码语言:java复制/**
* @author BNTang
* @version 1.0
* @project video_parent
* @description OSS云上传服务
* @since Created in 2021/4/3 12:17
**/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class UpLoadApplication {
public static void main(String[] args) {
/*
exclude = DataSourceAutoConfiguration.class:默认会加载数据库相关信息,现在是上传服务,里面用不到数据库相关信息,不让工程加载数据库相关信息
*/
SpringApplication.run(UpLoadApplication.class, args);
}
}
在 resources
中添加配置文件 application.yml
内容如下
# application-dev.yml
server:
port: 8002
logging:
pattern:
console: "%clr(%5p) %clr(-){faint} %clr(%-80.80logger{79}){cyan} %clr(:) %m%n"
spring:
application:
name: service-video
profiles:
active: dev
# 定义oss相关属性
oss:
endpoint: oss-cn-hangzhou.aliyuncs.com
accessKeyId: LTAI4GH19ep2P8caxW2E2N6A
accessKeySecret: NAmWiBmKXofw7hs4JRcx7SLhF1MN6P
bucketName: BNTang
oss 相关属性怎么来的呢,继续进入到我们上方开通好的 oss 管理控制台中选择 Bucket 管理
如下图:
按照我如下图进行选择即可,读写不能设置为私有,不然就不能访问了,同城冗余存储代表的是,如果出现故障了,它可以做备份,之前的数据还有,其它的就没什么要注意的了创建即可
创建好了之后界面如下图所示,我下图选中了一个 Endpoint
就是我们上方 oss 相关属性的 Endpoint 配置值,其它的在哪里呢,继续往下看 accessKey
就是我们之前创建的那个 accessKey
的界面中的 accessKey,不知道找了可以参考下图:
如下的方式大家自行替换一下吧,最近没有时间更新到腾讯云,所以我给大家一个参考过程大概意思就是还需要拿到桶的 accessKey 来进行认证
可能你一来不是显示的,需要获取验证码输入之后就可以看到了,复制上方的一些信息替换成你自己实际的即可配置完毕了, bucketName
就是你创建的 bucketName 的名称
定义工具类加载配置信息
代码语言:java复制/**
* @author BNTang
* @version 1.0
* @project video_parent
* @description 读取配置的属性信息
* @since Created in 2021/4/3 12:46
**/
@Component
public class OssConstant implements InitializingBean {
@Value("${oss.endpoint}")
private String endpoint;
@Value("${oss.accessKeyId}")
private String accessKeyId;
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
@Value("${oss.bucketName}")
private String bucketName;
public static String ENDPOINT;
public static String ASSESS_KEY_ID;
public static String ASSESS_KEY_SECRET;
public static String BUCKET_NAME;
/**
* 在属性文件加载完毕后属性也设置完毕之后, 会自动调用
*/
@Override
public void afterPropertiesSet() {
ENDPOINT = endpoint;
ASSESS_KEY_ID = accessKeyId;
ASSESS_KEY_SECRET = accessKeySecret;
BUCKET_NAME = bucketName;
}
}
定义上传的控制器接口
代码语言:java复制/**
* @author BNTang
* @version 1.0
* @project video_parent
* @description 上传oss控制器
* @since Created in 2021/4/3 12:53
**/
@RestController
@RequestMapping("/service_upload/file")
@Api(tags = "上传OSS")
@CrossOrigin
public class UpLoadController {
private final UpLoadService upLoadService;
public UpLoadController(UpLoadService upLoadService) {
this.upLoadService = upLoadService;
}
/**
* <p>
* 上传文件
* </p>
*
* @param file 文件
* @return 上传之后的文件下载地址 url
*/
@PostMapping("/uploadOssFile")
public ResponseResult uploadOssFile(MultipartFile file) {
return ResponseResult.ok().data("url", upLoadService.uploadFile(file));
}
}
定义上传的接口业务
代码语言:java复制/**
* @author BNTang
* @version 1.0
* @project video_parent
* @description 上传服务接口
* @since Created in 2021/4/3 12:56
**/
public interface UpLoadService {
/**
* <p>
* 上传OSS文件
* </p>
*
* @param file 文件
* @return 上传之后的url
*/
String uploadFile(MultipartFile file);
}
OSS 上传业务实现
代码语言:java复制/**
* @author BNTang
* @version 1.0
* @project video_parent
* @description OSS上传业务实现
* @since Created in 2021/4/3 12:57
**/
@Service
public class UpLoadServiceImpl implements UpLoadService {
@Override
public String uploadFile(MultipartFile file) {
// Endpoint以上海为例,其它Region请按实际情况填写。
String endpoint = OssConstant.ENDPOINT;
// 云账号AccessKey有所有API访问权限
String accessKeyId = OssConstant.ASSESS_KEY_ID;
String accessKeySecret = OssConstant.ASSESS_KEY_SECRET;
String bucketName = OssConstant.BUCKET_NAME;
// 创建OSSClient实例。
OSS ossClient = null;
try {
// 创建OSSClient实例。
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
InputStream inputStream = file.getInputStream();
// 处理文件名称
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String fileName = uuid file.getOriginalFilename();
// 把同一天上传的文件 放到同一个文件夹当中 2020/10/1/fileName
String date = new DateTime().toString("yyyy/MM/dd");
fileName = date "/" fileName;
ossClient.putObject(bucketName, fileName, inputStream);
// https://bntang.oss-cn-shanghai.aliyuncs.com/01-计算机语言概述1.png
return "https://" bucketName "." endpoint "/" fileName;
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭OSSClient。
if (null != ossClient) {
ossClient.shutdown();
}
}
return null;
}
}
重启工程进行测试上传,访问 swagger 选择需要上传的文件进行上传,在进行访问 swagger 的时候发现,弹出了如下图的内容,如果出现了下图中的内容就代表没有添加扫描包的注解
修改 service_upload 的启动类添加如下注解即可
代码语言:java复制@ComponentScan(basePackages = {"top.it6666"})
测试上传,成功,如下图
查看阿里云 OSS 存储文件列表如下图,发现已经OK了:
最后
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!