唠嗑部分
各位小伙伴大家好,我是全栈小白,之前我们分享了一期SpringBoot如何整合七牛云存储实现图片的上传与存储,今天我们接着分享一下SpringBoot整合阿里云OSS实现图片的上传与存储
言归正传
一、阿里云账号注册
阿里云OSS文件存储是免费的,注册比较简单,支付宝扫码登录,认证就好了
1、阿里云账号注册
官网:https://www.aliyun.com/
之前没用过的,直接点击开通就好了
开通成功后进入控制台,就长这样子
2、创建Bucket
这样我们的Bucket就创建成功了
二、SpringBoot整合并使用
阿里云JavaSDK开发者文档地址:https://help.aliyun.com/zh/oss/developer-reference/java/
基本的操作都有,咱们就不看了,直接开始干
1、创建SpringBoot项目,导入依赖
创建过程省略,部分依赖省略
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!-- 模板依赖-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.45</version>
</dependency>
<!-- 阿里云javaSDK-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
</dependencies>
2、配置文件application.yml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///aliyun-cloud-file-upload?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
# mybatis-plus相关配置
mybatis-plus:
type-aliases-package: com.cxs.model
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
aliyun:
upload:
# 访问ak
accessKey: LTAI5tNYLsMBPVzUZ5WHHrqg
# 访问sk
secretKey: O2WBBkz9z1KAWvATjZeBascuo4SKyz
# 你自己创建的空间名
bucket: xiaobai-images
# 表示在空间下穿件什么目录存储上传的图片
mkdir: images/
# 访问域名
domain: https://xiaobai-images.oss-cn-beijing.aliyuncs.com/
# 节点Endpoint,这是北京的
endpoint: https://oss-cn-beijing.aliyuncs.com
AKSK获取位置说明
点击头像,AccessKey管理
创建AccessKey
创建成功后,记得复制,只会展示一遍
复制AKSK到配置文件中
注意:用你自己的,我的不能用
domain、endpoint获取说明
注意:用你自己的,我的不能用
3、主要接口
/*
* @Project:cloud-file-upload
* @Author:cxs
* @Motto:放下杂念,只为迎接明天更好的自己
* */
@RestController
@RequestMapping("/images")
public class FileController {
@Autowired
private ImagesService imagesService;
/**
* 文件上传
* @param file
* @return
* @throws IOException
*/
@PostMapping("/upload")
public BaseResult upload(MultipartFile file) throws IOException {
BaseResult result = BaseResult.ok();
imagesService.uploadImage(file, result);
return result;
}
/**
* 获取文件列表
* @param dto
* @param request
* @return
*/
@PostMapping("/getImagesList")
public BaseResult getImagesList(@RequestBody BaseRequest dto, HttpServletRequest request){
BaseResult result = BaseResult.ok();
imagesService.getImagesList(dto, request, result);
return result;
}
/**
* 删除文件
* @param id
* @param request
* @return
*/
@DeleteMapping("/removeImages/{id}")
public BaseResult removeImages(@PathVariable("id") Integer id, HttpServletRequest request){
BaseResult result = BaseResult.ok();
imagesService.removeImages(id, request, result);
return result;
}
}
4、文件上传的主要代码
public String imageUploadGetUrl(MultipartFile file, BaseResult result) {
String url = null;
// 获取文件的源文件名
String originalFilename = file.getOriginalFilename();
// 截取后缀
String postFix = originalFilename.substring(originalFilename.lastIndexOf("."));
// 生成新的文件名
String fileNewName = UUID.randomUUID().toString().replace("-", "") + postFix;
// 判断上传的文件后缀是否符合要求
if (!Arrays.asList(arrImg).contains(postFix)) {
result.setCode(-1).setMsg("上传失败,类型暂不支持");
return null;
}
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey);
String objectName = mkdir + fileNewName;
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, objectName, new ByteArrayInputStream(file.getBytes()));
// 创建PutObject请求。
PutObjectResult res = ossClient.putObject(putObjectRequest);
result.setData(objectName);
url = domain + objectName;
} catch (Exception e) {
log.error("", e);
result.setCode(-1).setMsg("上传失败");
}
return url;
}
5、删除文件的主要代码
public void removeCloudImage(String key, BaseResult result) {
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey);
// 删除文件或目录。如果要删除目录,目录必须为空。
ossClient.deleteObject(bucket, key);
} catch (Exception e) {
e.printStackTrace();
}
}
结语
1、完结撒花,制作不易,点赞、分享、在看再走吧,您的支持永远是我最大的动力!
2、完整代码案例获取:下方公众号名片