oss封装插件
parent
a51d27fb72
commit
b7748c9606
|
@ -88,9 +88,14 @@
|
||||||
<version>${swagger.fox.version}</version>
|
<version>${swagger.fox.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.alibaba.csp</groupId>-->
|
||||||
|
<!-- <artifactId>sentinel-core</artifactId>-->
|
||||||
|
<!-- <version>1.8.7</version>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba.csp</groupId>
|
<groupId>com.alibaba.csp</groupId>
|
||||||
<artifactId>sentinel-core</artifactId>
|
<artifactId>sentinel-transport-simple-http</artifactId>
|
||||||
<version>1.8.7</version>
|
<version>1.8.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ spring:
|
||||||
eager: true
|
eager: true
|
||||||
transport:
|
transport:
|
||||||
# 控制台地址
|
# 控制台地址
|
||||||
dashboard: 127.0.0.1:8080
|
dashboard: 127.0.0.1:8858
|
||||||
# nacos配置持久化
|
# nacos配置持久化
|
||||||
datasource:
|
datasource:
|
||||||
ds1:
|
ds1:
|
||||||
|
|
|
@ -67,6 +67,14 @@
|
||||||
<artifactId>muyu-common-system</artifactId>
|
<artifactId>muyu-common-system</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--aliyun oos文件上传封装-->
|
||||||
|
<!-- 阿里云oss依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun.oss</groupId>
|
||||||
|
<artifactId>aliyun-sdk-oss</artifactId>
|
||||||
|
<version>3.12.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.muyu.file.config;
|
||||||
|
|
||||||
|
public class OSSCloudConfig {
|
||||||
|
static final String ENDPOINT_INTER = "oss-cn-guangzhou-internal.aliyuncs.com"; //ECS 的经典网络访问(内网)
|
||||||
|
public static final String ENDPOINT = "oss-cn-guangzhou.aliyuncs.com"; //外网访问
|
||||||
|
public static final String ACCESSKEYID = "your accesskeyId";
|
||||||
|
public static final String ACCESSKEYSECRET = "your accesskeysecret";
|
||||||
|
public static final String BUCKETNAME = "your bucket name";
|
||||||
|
public String objectPrefixName = "static/images/"; //基础文件夹
|
||||||
|
public String filePathPrefix = "https://" + BUCKETNAME + "." + ENDPOINT + "/" + objectPrefixName; //带https的完整访问前缀
|
||||||
|
public String getObjectPrefixName() {
|
||||||
|
return objectPrefixName;
|
||||||
|
}
|
||||||
|
public void setObjectPrefixName(String objectPrefixName) {
|
||||||
|
this.objectPrefixName = objectPrefixName;
|
||||||
|
}
|
||||||
|
public String getFilePathPrefix() {
|
||||||
|
return filePathPrefix;
|
||||||
|
}
|
||||||
|
public void setFilePathPrefix(String filePathPrefix) {
|
||||||
|
this.filePathPrefix = filePathPrefix;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.muyu.file.service;
|
||||||
|
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Eric
|
||||||
|
* @create 2022-04-24 23:39
|
||||||
|
*/
|
||||||
|
public interface OssService {
|
||||||
|
//上传头像到oss
|
||||||
|
String uploadFileAvatar(MultipartFile file);
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
//package com.muyu.file.service;
|
||||||
|
//
|
||||||
|
//import com.aliyun.oss.OSS;
|
||||||
|
//import com.aliyun.oss.OSSClientBuilder;
|
||||||
|
//import com.muyu.file.utils.ConstantPropertiesUtil;
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//import org.springframework.web.multipart.MultipartFile;
|
||||||
|
//
|
||||||
|
//import java.io.InputStream;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * @author Eric
|
||||||
|
// * @create 2022-04-24 23:40
|
||||||
|
// */
|
||||||
|
//@Service
|
||||||
|
//public class OssServiceImpl implements OssService {
|
||||||
|
//
|
||||||
|
// //上传头像到oss
|
||||||
|
// @Override
|
||||||
|
// public String uploadFileAvatar(MultipartFile file) {
|
||||||
|
//
|
||||||
|
// //工具类获取值:分别是:地域节点、id、秘钥、项目名称
|
||||||
|
// String endpoint = ConstantPropertiesUtil.END_POINT;
|
||||||
|
// String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
|
||||||
|
// String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
|
||||||
|
// String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// // 创建OSS实例。
|
||||||
|
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||||
|
//
|
||||||
|
// //获取上传文件输入流
|
||||||
|
// InputStream inputStream = file.getInputStream();
|
||||||
|
// //获取文件名称
|
||||||
|
// String fileName = file.getOriginalFilename();
|
||||||
|
//
|
||||||
|
// //1、在文件名称里面添加随机唯一值(因为如果上传文件名称相同的话,后面的问价会将前面的文件给覆盖了)
|
||||||
|
// String uuid = UUID.randomUUID().toString().replaceAll("-","");//因为生成后的值有横岗,我们就把它去除,不替换也可以,也没有错
|
||||||
|
// fileName = uuid + fileName;
|
||||||
|
//
|
||||||
|
// //2、把文件安装日期进行分类: 2022/10/11/1.jpg
|
||||||
|
// //获取当前日期
|
||||||
|
// String datePath = new DateTime().toString("yyyy/MM/dd");//在依赖中引入了该工具类
|
||||||
|
//
|
||||||
|
// //拼接
|
||||||
|
// fileName = datePath + "/" + fileName;
|
||||||
|
//
|
||||||
|
// //调用oss方法实现上传
|
||||||
|
// //参数一:Bucket名称 参数二:上传到oss文件路径和文件名称 比如 /aa/bb/1.jpg 或者直接使用文件名称 参数三:上传文件的流
|
||||||
|
// ossClient.putObject(bucketName,fileName,inputStream);
|
||||||
|
//
|
||||||
|
// //关闭OSSClient
|
||||||
|
// ossClient.shutdown();
|
||||||
|
//
|
||||||
|
// //把上传之后的文件路径返回
|
||||||
|
// //需要把上传到阿里云路径返回 https://edu-guli-eric.oss-cn-beijing.aliyuncs.com/1.jpg
|
||||||
|
// String url = " https://"+bucketName+"."+endpoint+"/"+fileName;
|
||||||
|
// return url;
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.muyu.file.utils;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取阿里云信息的工具类
|
||||||
|
* 该类的执行流程:
|
||||||
|
* 类加载后,先加载四个变量,再分别赋值
|
||||||
|
* 接着执行重写的方法
|
||||||
|
*
|
||||||
|
* @author Eric
|
||||||
|
* @create 2022-04-24 23:30
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class ConstantPropertiesUtil implements InitializingBean { //当项目一启动,就会执行该接口的重写方法
|
||||||
|
@Value("${aliyun.oss.file.endpoint}")
|
||||||
|
private String endpoint;//地域节点
|
||||||
|
|
||||||
|
@Value("${aliyun.oss.file.keyid}")
|
||||||
|
private String keyId;//id
|
||||||
|
|
||||||
|
@Value("${aliyun.oss.file.keysecret}")
|
||||||
|
private String keySecret;//秘钥
|
||||||
|
|
||||||
|
@Value("${aliyun.oss.file.bucketname}")
|
||||||
|
private String bucketName;//项目名称
|
||||||
|
|
||||||
|
public static String END_POINT;
|
||||||
|
public static String ACCESS_KEY_ID;
|
||||||
|
public static String ACCESS_KEY_SECRET;
|
||||||
|
public static String BUCKET_NAME;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
END_POINT = endpoint;
|
||||||
|
ACCESS_KEY_ID = keyId;
|
||||||
|
ACCESS_KEY_SECRET = keySecret;
|
||||||
|
BUCKET_NAME = bucketName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,193 @@
|
||||||
|
package com.muyu.file.utils;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.aliyun.oss.ClientBuilderConfiguration;
|
||||||
|
import com.aliyun.oss.OSS;
|
||||||
|
import com.aliyun.oss.OSSClientBuilder;
|
||||||
|
import com.aliyun.oss.common.comm.Protocol;
|
||||||
|
import com.aliyun.oss.model.OSSObjectSummary;
|
||||||
|
import com.aliyun.oss.model.ObjectListing;
|
||||||
|
|
||||||
|
import com.muyu.file.config.OSSCloudConfig;
|
||||||
|
|
||||||
|
|
||||||
|
public class OSSCloudClient {
|
||||||
|
|
||||||
|
private OSSCloudClient() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SingletonContainer{
|
||||||
|
private static OSSCloudClient instance = new OSSCloudClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static OSSCloudClient getInstance() {
|
||||||
|
return SingletonContainer.instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private OSS createOSS() {
|
||||||
|
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
|
||||||
|
// 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP。
|
||||||
|
conf.setProtocol(Protocol.HTTPS);
|
||||||
|
|
||||||
|
// 创建OSSClient实例。
|
||||||
|
return new OSSClientBuilder().build(OSSCloudConfig.ENDPOINT, OSSCloudConfig.ACCESSKEYID, OSSCloudConfig.ACCESSKEYSECRET);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, String> getObjectName(String fileName, String userId) {
|
||||||
|
Map<String, String> nameMap = new HashMap<>();
|
||||||
|
OSSCloudConfig config = new OSSCloudConfig();
|
||||||
|
String format = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
|
||||||
|
String name = userId + "/" + format + "/" + UUID.randomUUID().toString().replace("-", "") + "_" + fileName;
|
||||||
|
nameMap.put("objectName", config.getObjectPrefixName() + name);
|
||||||
|
nameMap.put("filePath", config.getFilePathPrefix() + name);
|
||||||
|
return nameMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getObjectName(String filePath) {
|
||||||
|
OSSCloudConfig config = new OSSCloudConfig();
|
||||||
|
return config.getObjectPrefixName() + filePath.replace(config.getFilePathPrefix(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
* @param fileName 文件名称
|
||||||
|
* @param userId 用户id
|
||||||
|
* @param bytes byte数组
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String uploadFile(String fileName, String userId, byte[] bytes) throws Exception {
|
||||||
|
Map<String, String> nameMap = this.getObjectName(fileName, userId);
|
||||||
|
String objectName = nameMap.get("objectName");
|
||||||
|
OSS ossClient = createOSS();
|
||||||
|
try {
|
||||||
|
ossClient.putObject(OSSCloudConfig.BUCKETNAME, objectName, new ByteArrayInputStream(bytes));
|
||||||
|
} finally {
|
||||||
|
if (ossClient != null) {
|
||||||
|
ossClient.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nameMap.get("filePath");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
* @param fileName 文件名称
|
||||||
|
* @param userId 用户id
|
||||||
|
* @param localPath 本地文件路径
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String uploadFile(String fileName, String userId, String localPath) throws Exception {
|
||||||
|
Map<String, String> nameMap = this.getObjectName(fileName, userId);
|
||||||
|
String objectName = nameMap.get("objectName");
|
||||||
|
OSS ossClient = createOSS();
|
||||||
|
try {
|
||||||
|
ossClient.putObject(OSSCloudConfig.BUCKETNAME, objectName, new FileInputStream(new File(localPath)));
|
||||||
|
} finally {
|
||||||
|
if (ossClient != null) {
|
||||||
|
ossClient.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nameMap.get("filePath");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
* @param fileName 文件名称
|
||||||
|
* @param userId 用户id
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String uploadFile(String fileName, String userId, InputStream is) throws Exception {
|
||||||
|
Map<String, String> nameMap = this.getObjectName(fileName, userId);
|
||||||
|
String objectName = nameMap.get("objectName");
|
||||||
|
OSS ossClient = createOSS();
|
||||||
|
try {
|
||||||
|
ossClient.putObject(OSSCloudConfig.BUCKETNAME, objectName, is);
|
||||||
|
} finally {
|
||||||
|
if (ossClient != null) {
|
||||||
|
ossClient.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nameMap.get("filePath");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件是否存在
|
||||||
|
* @param filePath 文件完整访问路径(带https)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Boolean fileExist(String filePath) {
|
||||||
|
String objectName = this.getObjectName(filePath);
|
||||||
|
OSS ossClient = createOSS();
|
||||||
|
try {
|
||||||
|
return ossClient.doesObjectExist(OSSCloudConfig.BUCKETNAME, objectName);
|
||||||
|
} finally {
|
||||||
|
if (ossClient != null) {
|
||||||
|
ossClient.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列举文件
|
||||||
|
* @param dirPath 想要列举的文件夹 比如1/20220415
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<String> listFiles(String dirPath) {
|
||||||
|
OSSCloudConfig config = new OSSCloudConfig();
|
||||||
|
String objectDir = config.getObjectPrefixName() + dirPath;
|
||||||
|
// String objectName = this.getObjectName(filePath);
|
||||||
|
OSS ossClient = createOSS();
|
||||||
|
try {
|
||||||
|
ObjectListing objectListing = ossClient.listObjects(OSSCloudConfig.BUCKETNAME, objectDir);
|
||||||
|
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
for (OSSObjectSummary s : sums) {
|
||||||
|
list.add(config.getFilePathPrefix() + (s.getKey().replace(config.getObjectPrefixName(), "")));
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
} finally {
|
||||||
|
if (ossClient != null) {
|
||||||
|
ossClient.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param filePath 删除文件或目录。如果要删除目录,目录必须为空。 (带域名访问路径的)
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteFile(String filePath) throws Exception {
|
||||||
|
String objectName = this.getObjectName(filePath);
|
||||||
|
OSS ossClient = createOSS();
|
||||||
|
try {
|
||||||
|
ossClient.deleteObject(OSSCloudConfig.BUCKETNAME, objectName);
|
||||||
|
} finally {
|
||||||
|
if (ossClient != null) {
|
||||||
|
ossClient.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
OSSCloudClient client = OSSCloudClient.getInstance();
|
||||||
|
String filePath = client.uploadFile("读书记录封面.png", "1", "D:\\Pictures\\bookrecording\\读书记录封面.png");
|
||||||
|
System.out.println(filePath);
|
||||||
|
System.out.println(client.fileExist(filePath));
|
||||||
|
List<String> list = client.listFiles("1/20220416/");
|
||||||
|
for(String s : list) {
|
||||||
|
System.out.println(s);
|
||||||
|
client.deleteFile(s);
|
||||||
|
}
|
||||||
|
client.deleteFile("https://zhaohy-bucket.oss-cn-guangzhou.aliyuncs.com/static/images/1/20220415");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -23,3 +23,12 @@ spring:
|
||||||
# 共享配置
|
# 共享配置
|
||||||
shared-configs:
|
shared-configs:
|
||||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||||
|
|
||||||
|
#阿里云 OSS(配置bucket信息)
|
||||||
|
aliyun:
|
||||||
|
oss:
|
||||||
|
file:
|
||||||
|
endpoint: oss-cn-beijing.aliyuncs.com #地域节点
|
||||||
|
keyid: LTAI5tXLU13zKh4VHzXyz #ID
|
||||||
|
keysecret: ZgmX5vSqlMF4H5nliXErLxhDQ703HF #秘钥
|
||||||
|
bucketname: aly-item-eric #项目名称
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
|
|
||||||
<select id="selectDbTableList" parameterType="com.muyu.gen.domain.GenTable" resultMap="GenTableResult">
|
<select id="selectDbTableList" parameterType="com.muyu.gen.domain.GenTable" resultMap="GenTableResult">
|
||||||
select table_name, table_comment, create_time, update_time from information_schema.tables
|
select table_name, table_comment, create_time, update_time from information_schema.tables
|
||||||
where table_schema = (select database())
|
where (table_schema = (select database()) or table_schema = 'ten-product')
|
||||||
AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
|
AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
|
||||||
AND table_name NOT IN (select table_name from gen_table)
|
AND table_name NOT IN (select table_name from gen_table)
|
||||||
<if test="tableName != null and tableName != ''">
|
<if test="tableName != null and tableName != ''">
|
||||||
|
|
Loading…
Reference in New Issue