mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-11-11 03:33:51 +08:00
update 重写 OSS 模块相关实现 支持动态配置(页面配置)
This commit is contained in:
@@ -5,11 +5,11 @@ import com.ruoyi.oss.entity.UploadResult;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* 云存储服务接口
|
||||
* 云存储策略
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
public interface ICloudStorageService {
|
||||
public interface ICloudStorageStrategy {
|
||||
|
||||
void createBucket();
|
||||
|
||||
@@ -5,18 +5,20 @@ import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.oss.entity.UploadResult;
|
||||
import com.ruoyi.oss.service.ICloudStorageService;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||
import com.ruoyi.oss.service.ICloudStorageStrategy;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 云存储(支持七牛、阿里云、腾讯云、minio)
|
||||
* 云存储策略(支持七牛、阿里云、腾讯云、minio)
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean {
|
||||
public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrategy {
|
||||
|
||||
protected CloudStorageProperties properties;
|
||||
|
||||
@Override
|
||||
public abstract void createBucket();
|
||||
@@ -54,9 +56,6 @@ public abstract class AbstractCloudStorageService implements ICloudStorageServic
|
||||
@Override
|
||||
public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
|
||||
|
||||
@Override
|
||||
public abstract void afterPropertiesSet() throws Exception;
|
||||
|
||||
@Override
|
||||
public abstract String getEndpointLink();
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.ruoyi.oss.service.impl;
|
||||
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.aliyun.oss.ClientConfiguration;
|
||||
import com.aliyun.oss.OSSClient;
|
||||
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
|
||||
@@ -8,42 +7,32 @@ import com.aliyun.oss.model.CannedAccessControlList;
|
||||
import com.aliyun.oss.model.CreateBucketRequest;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import com.aliyun.oss.model.PutObjectRequest;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.oss.entity.UploadResult;
|
||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||
import com.ruoyi.oss.exception.OssException;
|
||||
import com.ruoyi.oss.factory.OssFactory;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties.AliyunProperties;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* 阿里云存储
|
||||
* 阿里云存储策略
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Lazy
|
||||
@Service
|
||||
public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
||||
public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||
|
||||
private final OSSClient client;
|
||||
private final AliyunProperties properties;
|
||||
|
||||
@Autowired
|
||||
public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) {
|
||||
this.properties = properties.getAliyun();
|
||||
public AliyunCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||
properties = cloudStorageProperties;
|
||||
try {
|
||||
ClientConfiguration configuration = new ClientConfiguration();
|
||||
DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
|
||||
this.properties.getAccessKeyId(),
|
||||
this.properties.getAccessKeySecret());
|
||||
client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration);
|
||||
properties.getAccessKey(), properties.getSecretKey());
|
||||
client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);
|
||||
createBucket();
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException("阿里云存储配置错误! 请检查系统配置!");
|
||||
@@ -107,11 +96,6 @@ public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService i
|
||||
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
OssFactory.register(getServiceType(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEndpointLink() {
|
||||
String endpoint = properties.getEndpoint();
|
||||
@@ -5,39 +5,29 @@ import com.ruoyi.oss.entity.UploadResult;
|
||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||
import com.ruoyi.oss.enumd.PolicyType;
|
||||
import com.ruoyi.oss.exception.OssException;
|
||||
import com.ruoyi.oss.factory.OssFactory;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties.MinioProperties;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||
import io.minio.*;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* minio存储
|
||||
* minio存储策略
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Lazy
|
||||
@Service
|
||||
public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
||||
public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||
|
||||
private final MinioClient minioClient;
|
||||
private final MinioProperties properties;
|
||||
|
||||
@Autowired
|
||||
public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
|
||||
this.properties = properties.getMinio();
|
||||
public MinioCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||
properties = cloudStorageProperties;
|
||||
try {
|
||||
minioClient = MinioClient.builder()
|
||||
.endpoint(this.properties.getEndpoint())
|
||||
.credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
|
||||
.endpoint(properties.getEndpoint())
|
||||
.credentials(properties.getAccessKey(), properties.getSecretKey())
|
||||
.build();
|
||||
createBucket();
|
||||
} catch (Exception e) {
|
||||
@@ -112,11 +102,6 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService im
|
||||
return upload(inputStream, getPath("", suffix), contentType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
OssFactory.register(getServiceType(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEndpointLink() {
|
||||
return properties.getEndpoint() + "/" + properties.getBucketName();
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.ruoyi.oss.service.impl;
|
||||
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.qcloud.cos.COSClient;
|
||||
import com.qcloud.cos.ClientConfig;
|
||||
import com.qcloud.cos.auth.BasicCOSCredentials;
|
||||
@@ -8,45 +7,35 @@ import com.qcloud.cos.auth.COSCredentials;
|
||||
import com.qcloud.cos.http.HttpProtocol;
|
||||
import com.qcloud.cos.model.*;
|
||||
import com.qcloud.cos.region.Region;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.oss.entity.UploadResult;
|
||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||
import com.ruoyi.oss.exception.OssException;
|
||||
import com.ruoyi.oss.factory.OssFactory;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties.QcloudProperties;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* 腾讯云存储
|
||||
* 腾讯云存储策略
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Lazy
|
||||
@Service
|
||||
public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
||||
public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||
|
||||
private final COSClient client;
|
||||
private final QcloudProperties properties;
|
||||
|
||||
@Autowired
|
||||
public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) {
|
||||
this.properties = properties.getQcloud();
|
||||
public QcloudCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||
properties = cloudStorageProperties;
|
||||
try {
|
||||
COSCredentials credentials = new BasicCOSCredentials(
|
||||
this.properties.getSecretId(),
|
||||
this.properties.getSecretKey());
|
||||
properties.getAccessKey(), properties.getSecretKey());
|
||||
// 初始化客户端配置
|
||||
ClientConfig clientConfig = new ClientConfig();
|
||||
// 设置bucket所在的区域,华南:gz 华北:tj 华东:sh
|
||||
clientConfig.setRegion(new Region(this.properties.getRegion()));
|
||||
if (this.properties.getIsHttps()) {
|
||||
clientConfig.setRegion(new Region(properties.getRegion()));
|
||||
if ("Y".equals(properties.getIsHttps())) {
|
||||
clientConfig.setHttpProtocol(HttpProtocol.https);
|
||||
} else {
|
||||
clientConfig.setHttpProtocol(HttpProtocol.http);
|
||||
@@ -115,11 +104,6 @@ public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService i
|
||||
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
OssFactory.register(getServiceType(),this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEndpointLink() {
|
||||
String endpoint = properties.getEndpoint();
|
||||
@@ -10,51 +10,37 @@ import com.qiniu.util.Auth;
|
||||
import com.ruoyi.oss.entity.UploadResult;
|
||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||
import com.ruoyi.oss.exception.OssException;
|
||||
import com.ruoyi.oss.factory.OssFactory;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||
import com.ruoyi.oss.properties.CloudStorageProperties.QiniuProperties;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* 七牛云存储
|
||||
* 七牛云存储策略
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Lazy
|
||||
@Service
|
||||
public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
||||
public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||
|
||||
private final UploadManager uploadManager;
|
||||
private final BucketManager bucketManager;
|
||||
private final String token;
|
||||
private final QiniuProperties properties;
|
||||
|
||||
@Autowired
|
||||
public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) {
|
||||
this.properties = properties.getQiniu();
|
||||
public QiniuCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||
properties = cloudStorageProperties;
|
||||
try {
|
||||
Configuration config = new Configuration(getRegion(this.properties.getRegion()));
|
||||
Configuration config = new Configuration(getRegion(properties.getRegion()));
|
||||
// https设置
|
||||
config.useHttpsDomains = false;
|
||||
if (this.properties.getIsHttps() != null) {
|
||||
config.useHttpsDomains = this.properties.getIsHttps();
|
||||
}
|
||||
config.useHttpsDomains = "Y".equals(properties.getIsHttps());
|
||||
uploadManager = new UploadManager(config);
|
||||
Auth auth = Auth.create(
|
||||
this.properties.getAccessKey(),
|
||||
this.properties.getSecretKey());
|
||||
String bucketName = this.properties.getBucketName();
|
||||
Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
|
||||
String bucketName = properties.getBucketName();
|
||||
token = auth.uploadToken(bucketName);
|
||||
bucketManager = new BucketManager(auth, config);
|
||||
|
||||
if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
|
||||
bucketManager.createBucket(bucketName, this.properties.getRegion());
|
||||
bucketManager.createBucket(bucketName, properties.getRegion());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException("七牛云存储配置错误! 请检查系统配置!");
|
||||
@@ -115,14 +101,9 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService im
|
||||
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
OssFactory.register(getServiceType(),this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEndpointLink() {
|
||||
return properties.getDomain();
|
||||
return properties.getEndpoint();
|
||||
}
|
||||
|
||||
private Region getRegion(String region) {
|
||||
Reference in New Issue
Block a user