add 增加 OSS 对象存储模块 相关代码(未完成)

This commit is contained in:
疯狂的狮子li
2021-07-17 20:44:27 +08:00
parent d7fde6fe0d
commit 7e90d84598
21 changed files with 1018 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
package com.ruoyi.oss.service;
import java.io.InputStream;
public interface ICloudStorageService {
/**
* 文件路径
*
* @param prefix 前缀
* @param suffix 后缀
* @return 返回上传路径
*/
String getPath(String prefix, String suffix);
/**
* 文件上传
*
* @param data 文件字节数组
* @param path 文件路径,包含文件名
* @return 返回http地址
*/
String upload(byte[] data, String path);
/**
* 文件删除
*
* @param path 文件路径,包含文件名
*/
void delete(String path);
/**
* 文件上传
*
* @param data 文件字节数组
* @param suffix 后缀
* @return 返回http地址
*/
String uploadSuffix(byte[] data, String suffix);
/**
* 文件上传
*
* @param inputStream 字节流
* @param path 文件路径,包含文件名
* @return 返回http地址
*/
String upload(InputStream inputStream, String path);
/**
* 文件上传
*
* @param inputStream 字节流
* @param suffix 后缀
* @return 返回http地址
*/
String uploadSuffix(InputStream inputStream, String suffix);
}

View File

@@ -0,0 +1,36 @@
package com.ruoyi.oss.service.abstractd;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.oss.config.CloudStorageConfig;
import com.ruoyi.oss.service.ICloudStorageService;
import com.ruoyi.oss.utils.DateUtils;
import java.util.UUID;
/**
* 云存储(支持七牛、阿里云、腾讯云、minio)
*/
public abstract class AbstractCloudStorageService implements ICloudStorageService {
/**
* 云存储配置信息
*/
protected CloudStorageConfig config;
public int getServiceType() {
return config.getType();
}
@Override
public String getPath(String prefix, String suffix) {
// 生成uuid
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 文件路径
String path = DateUtils.dateTime() + "/" + uuid;
if (StrUtil.isNotBlank(prefix)) {
path = prefix + "/" + path;
}
return path + suffix;
}
}

View File

@@ -0,0 +1,62 @@
package com.ruoyi.oss.service.impl;
import com.aliyun.oss.OSSClient;
import com.ruoyi.oss.config.CloudStorageConfig;
import com.ruoyi.oss.exception.OssException;
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
* 阿里云存储
*/
public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService {
private OSSClient client;
public AliyunCloudStorageServiceImpl(CloudStorageConfig config) {
this.config = config;
// 初始化
init();
}
private void init() {
client = new OSSClient(config.getDomain(), config.getAccessKey(), config.getSecretKey());
}
@Override
public String upload(byte[] data, String path) {
return upload(new ByteArrayInputStream(data), path);
}
@Override
public String upload(InputStream inputStream, String path) {
try {
client.putObject(config.getBucketName(), path, inputStream);
} catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息");
}
return config.getDomain() + "/" + path;
}
@Override
public void delete(String path) {
path = path.replace(config.getDomain() + "/", "");
try {
client.deleteObject(config.getBucketName(), path);
} catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息");
}
}
@Override
public String uploadSuffix(byte[] data, String suffix) {
return upload(data, getPath(config.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getPrefix(), suffix));
}
}

View File

@@ -0,0 +1,66 @@
package com.ruoyi.oss.service.impl;
import cn.hutool.core.io.IoUtil;
import com.ruoyi.oss.config.CloudStorageConfig;
import com.ruoyi.oss.exception.OssException;
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
import io.minio.MinioClient;
import java.io.InputStream;
/**
* minio存储
*/
public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService {
private MinioClient minioClient;
public MinioCloudStorageServiceImpl(CloudStorageConfig config) {
this.config = config;
// 初始化
init();
}
private void init() {
minioClient = MinioClient.builder()
.endpoint(config.getDomain())
.credentials(config.getAccessKey(), config.getSecretKey())
.build();
}
@Override
public String upload(byte[] data, String path) {
try {
} catch (Exception e) {
throw new OssException("上传文件失败请核对Minio配置信息");
}
return config.getDomain() + "/" + path;
}
@Override
public void delete(String path) {
try {
} catch (Exception e) {
throw new OssException(e.getMessage());
}
}
@Override
public String upload(InputStream inputStream, String path) {
byte[] data = IoUtil.readBytes(inputStream);
return this.upload(data, path);
}
@Override
public String uploadSuffix(byte[] data, String suffix) {
return upload(data, getPath(config.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getPrefix(), suffix));
}
}

View File

@@ -0,0 +1,77 @@
package com.ruoyi.oss.service.impl;
import cn.hutool.core.io.IoUtil;
import com.qcloud.cos.COSClient;
import com.ruoyi.oss.config.CloudStorageConfig;
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
import java.io.InputStream;
/**
* 腾讯云存储
*/
public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService {
private COSClient client;
public QcloudCloudStorageServiceImpl(CloudStorageConfig config) {
this.config = config;
// 初始化
init();
}
private void init() {
// Credentials credentials = new Credentials(config.getQcloudAppId(), config.getQcloudSecretId(),
// config.getQcloudSecretKey());
// 初始化客户端配置
// ClientConfig clientConfig = new ClientConfig();
// // 设置bucket所在的区域华南gz 华北tj 华东sh
// clientConfig.setRegion(config.getQcloudRegion());
// client = new COSClient(clientConfig, credentials);
}
@Override
public String upload(byte[] data, String path) {
// 腾讯云必需要以"/"开头
if (!path.startsWith("/")) {
path = "/" + path;
}
// 上传到腾讯云
// UploadFileRequest request = new UploadFileRequest(config.getQcloudBucketName(), path, data);
// String response = client.uploadFile(request);
// Map<String, Object> jsonObject = JsonUtils.parseMap(response);
// if (Convert.toInt(jsonObject.get("code")) != 0) {
// throw new OssException("文件上传失败," + Convert.toStr(jsonObject.get("message")));
// }
return config.getDomain() + path;
}
@Override
public void delete(String path) {
// path = path.replace(config.getDomain(),"");
// DelFileRequest request = new DelFileRequest(config.getBucketName(), path);
// String response = client.delFile(request);
// Map<String, Object> jsonObject = JsonUtils.parseMap(response);
// if (Convert.toInt(jsonObject.get("code")) != 0) {
// throw new OssException("文件删除失败," + Convert.toStr(jsonObject.get("message")));
// }
}
@Override
public String upload(InputStream inputStream, String path) {
byte[] data = IoUtil.readBytes(inputStream);
return this.upload(data, path);
}
@Override
public String uploadSuffix(byte[] data, String suffix) {
return upload(data, getPath(config.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getPrefix(), suffix));
}
}

View File

@@ -0,0 +1,84 @@
package com.ruoyi.oss.service.impl;
import cn.hutool.core.io.IoUtil;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.ruoyi.oss.config.CloudStorageConfig;
import com.ruoyi.oss.exception.OssException;
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
import java.io.InputStream;
/**
* 七牛云存储
*/
public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService {
private UploadManager uploadManager;
private BucketManager bucketManager;
private String token;
public QiniuCloudStorageServiceImpl(CloudStorageConfig config) {
this.config = config;
// 初始化
init();
}
private void init() {
// z0 z1 z2
Configuration config = new Configuration(Region.autoRegion());
// 默认不使用https
config.useHttpsDomains = false;
uploadManager = new UploadManager(config);
Auth auth = Auth.create(this.config.getAccessKey(), this.config.getSecretKey());
token = auth.uploadToken(this.config.getBucketName());
bucketManager = new BucketManager(auth, config);
}
@Override
public String upload(byte[] data, String path) {
try {
Response res = uploadManager.put(data, path, token);
if (!res.isOK()) {
throw new RuntimeException("上传七牛出错:" + res.toString());
}
} catch (Exception e) {
throw new OssException("上传文件失败,请核对七牛配置信息");
}
return config.getDomain() + "/" + path;
}
@Override
public void delete(String path) {
try {
path = path.replace(config.getDomain() + "/", "");
Response res = bucketManager.delete(config.getBucketName(), path);
if (!res.isOK()) {
throw new RuntimeException("删除七牛文件出错:" + res.toString());
}
} catch (Exception e) {
throw new OssException(e.getMessage());
}
}
@Override
public String upload(InputStream inputStream, String path) {
byte[] data = IoUtil.readBytes(inputStream);
return this.upload(data, path);
}
@Override
public String uploadSuffix(byte[] data, String suffix) {
return upload(data, getPath(config.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getPrefix(), suffix));
}
}