使用阿里云OOS对象存储服务
首先在阿里云服务器上使用OOS对象存储服务创建对应的Bucket
具体步骤不写了
下面开始整合SpringBoot OSS
创建工程 导入依赖
<!-- OSS SDK 相关依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.4.2</version>
</dependency>
在application.yml中进行配置application.yml
## aliyun oss
## 配置说明参考: com.ljq.demo.springboot.common.config.OSSConfig.class
oss:
endpoint: # 在阿里云刚创建的Bucket概述中的 Endpoint(地域节点)
url: # 图片存储后返回的地址: https://在阿里云刚创建的Bucket概述中的Bucket 域名/
accessKeyId: #这里在个人中心里accesskeys查看
accessKeySecret: #这里在个人中心里accesskeys查看
bucketName: # 这里写OSS里自己创建的Bucket名称
写一个config配置类
package com.ihrm.system.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.io.Serializable;
@Data
@Configuration
public class OSSConfig implements Serializable {
private static final long serialVersionUID = -119396871324982279L;
/**
* 阿里云 oss 站点
*/
@Value("${oss.endpoint}")
private String endpoint;
/**
* 阿里云 oss 资源访问 url
*/
@Value("${oss.url}")
private String url;
/**
* 阿里云 oss 公钥
*/
@Value("${oss.accessKeyId}")
private String accessKeyId;
/**
* 阿里云 oss 私钥
*/
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
/**
* 阿里云 oss 文件根目录
*/
@Value("${oss.bucketName}")
private String bucketName;
}
工具类
package com.ihrm.system.utls;
import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.ObjectMetadata;
import com.ihrm.system.config.OSSConfig;
import com.ihrm.system.config.ResponseResult;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
public class OSSBootUtil {
private OSSBootUtil(){}
/**
* oss 工具客户端
*/
private volatile static OSSClient ossClient = null;
/**
* 上传文件至阿里云 OSS
* 文件上传成功,返回文件完整访问路径
* 文件上传失败,返回 null
* @author jiangpengcheng
* @param ossConfig oss 配置信息
* @param file 待上传文件
* @param fileDir 文件保存目录
* @return oss 中的相对文件路径
*/
public static String upload(OSSConfig ossConfig, MultipartFile file, String fileDir){
initOSS(ossConfig);
StringBuilder fileUrl = new StringBuilder();
try {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
if (!fileDir.endsWith("/")) {
fileDir = fileDir.concat("/");
}
fileUrl = fileUrl.append(fileDir + fileName);
System.out.println(fileUrl+"-----------------");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");
ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream(),objectMetadata);
} catch (IOException e) {
e.printStackTrace();
return null;
}
fileUrl = fileUrl.insert(0,ossConfig.getUrl());
return fileUrl.toString();
}
/**
* 初始化 oss 客户端
* @param ossConfig
* @return
*/
private static OSSClient initOSS(OSSConfig ossConfig) {
if (ossClient == null ) {
synchronized (OSSBootUtil.class) {
if (ossClient == null) {
ossClient = new OSSClient(ossConfig.getEndpoint(),
new DefaultCredentialProvider(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()),
new ClientConfiguration());
}
}
}
return ossClient;
}
/**
* 根据前台传过来的文件地址 删除文件
* @author jiangpengcheng
* @param objectName
* @param ossConfig
* @return
*/
public static ResponseResult delete(String objectName, OSSConfig ossConfig) {
initOSS(ossConfig);
//将完整路径替换成 文件地址 因为yml里的url有了地址链接https: //oos-all.oss-cn-shenzhen.aliyuncs.com/
// 如果再加上地址 那么又拼接了 所以删除不了 要先把地址替换为 jpc/2020-07-16/1594857669731-51d057b0-9778-4aed.png
String fileName = objectName.replace("https://oos-all.oss-cn-shenzhen.aliyuncs.com/", "");
System.out.println(fileName+"******************************");
// 根据BucketName,objectName删除文件
ossClient.deleteObject(ossConfig.getBucketName(), fileName);
return ResponseResult.ok("删除成功",fileName);
}
}
Service类
package com.ihrm.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ihrm.domain.system.*;
import com.ihrm.system.config.OSSConfig;
import com.ihrm.system.config.ResponseResult;
import com.ihrm.system.mapper.*;
import com.ihrm.system.service.UserService;
import com.ihrm.system.utls.OSSBootUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* <p>
* 服务实现类
* </p>
*
* @author Zhm
* @since 2021-03-04
*/
@Service
public class UserServiceImpl {
@Autowired
private OSSConfig ossConfig;
/**
* 用户头像上传
*/
@Override
public String uploadImage(String id, MultipartFile file) {
// 格式化时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(new Date());
// 高依赖版本 oss 上传工具
String ossFileUrlBoot = null;
/**
* ossConfig 配置类
* file 文件
* "jpc/"+format 上传文件地址 加时间戳
*/
ossFileUrlBoot = OSSBootUtil.upload(ossConfig, file, "jpc/" + format);
return ossFileUrlBoot;
}
}
本文介绍如何在SpringBoot项目中整合阿里云OSS服务,包括创建Bucket、配置依赖及参数、实现文件上传和删除等功能。
1万+





