From 7e90d845987127718d34f27b4ebfdcafaa8e4e4e Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期六, 17 七月 2021 20:44:27 +0800
Subject: [PATCH] add 增加 OSS 对象存储模块 相关代码(未完成)
---
ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java | 36 ++
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java | 66 +++
ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java | 63 +++
ruoyi-admin/pom.xml | 5
ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java | 31 +
ruoyi-oss/src/main/java/com/ruoyi/oss/exception/OssException.java | 16
ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java | 58 +++
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java | 77 ++++
pom.xml | 14
ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java | 135 +++++++
ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml | 21 +
ruoyi-oss/src/main/resources/sql/oss.sql | 30 +
ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java | 69 ++++
ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java | 24 +
ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java | 43 ++
ruoyi-oss/pom.xml | 55 +++
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java | 84 ++++
ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java | 13
ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java | 58 +++
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java | 62 +++
ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java | 58 +++
21 files changed, 1,018 insertions(+), 0 deletions(-)
diff --git a/pom.xml b/pom.xml
index 00becec..b590720 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,12 @@
<lock4j.version>2.2.1</lock4j.version>
<datasource.version>3.4.0</datasource.version>
+ <!-- OSS 閰嶇疆 -->
+ <qiniu.version>7.8.0</qiniu.version>
+ <aliyun.oss.version>3.13.0</aliyun.oss.version>
+ <qcloud.cos.version>5.6.47</qcloud.cos.version>
+ <minio.version>8.2.2</minio.version>
+
<!-- docker 閰嶇疆 -->
<docker.registry.url>localhost</docker.registry.url>
<docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host>
@@ -183,6 +189,13 @@
<!-- demo妯″潡 -->
<dependency>
<groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-oss</artifactId>
+ <version>${ruoyi-vue-plus.version}</version>
+ </dependency>
+
+ <!-- demo妯″潡 -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-demo</artifactId>
<version>${ruoyi-vue-plus.version}</version>
</dependency>
@@ -199,6 +212,7 @@
<module>ruoyi-common</module>
<module>ruoyi-demo</module>
<module>ruoyi-extend</module>
+ <module>ruoyi-oss</module>
</modules>
<packaging>pom</packaging>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 7ff67be..5c895a8 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -42,6 +42,11 @@
<artifactId>ruoyi-quartz</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-oss</artifactId>
+ </dependency>
+
<!-- 浠g爜鐢熸垚-->
<dependency>
<groupId>com.ruoyi</groupId>
diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml
new file mode 100644
index 0000000..ad8197c
--- /dev/null
+++ b/ruoyi-oss/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>ruoyi-vue-plus</artifactId>
+ <groupId>com.ruoyi</groupId>
+ <version>2.5.1</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>ruoyi-oss</artifactId>
+
+ <description>
+ OSS瀵硅薄瀛樺偍妯″潡
+ </description>
+
+ <dependencies>
+
+ <!-- 閫氱敤宸ュ叿-->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-common</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.qiniu</groupId>
+ <artifactId>qiniu-java-sdk</artifactId>
+ <version>${qiniu.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.aliyun.oss</groupId>
+ <artifactId>aliyun-sdk-oss</artifactId>
+ <version>${aliyun.oss.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.qcloud</groupId>
+ <artifactId>cos_api</artifactId>
+ <version>${qcloud.cos.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.minio</groupId>
+ <artifactId>minio</artifactId>
+ <version>${minio.version}</version>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
new file mode 100644
index 0000000..c0f7ee9
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
@@ -0,0 +1,69 @@
+package com.ruoyi.oss.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.Serializable;
+
+/**
+ * 浜戝瓨鍌ㄩ厤缃俊鎭�
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "cloud-storage")
+public class CloudStorageConfig implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 绫诲瀷 1锛氫竷鐗� 2锛氶樋閲屼簯 3锛氳吘璁簯 4: minio
+ */
+ private Integer type;
+
+ /**
+ * 涓冪墰缁戝畾鐨勫煙鍚�
+ */
+ private String domain;
+
+ /**
+ * 涓冪墰璺緞鍓嶇紑
+ */
+ private String prefix;
+
+ /**
+ * 涓冪墰ACCESS_KEY
+ */
+ private String accessKey;
+
+ /**
+ * 涓冪墰SECRET_KEY
+ */
+ private String secretKey;
+
+ /**
+ * 涓冪墰瀛樺偍绌洪棿鍚�
+ */
+ private String bucketName;
+
+ /**
+ * 鑵捐浜慉ppId
+ */
+ private Integer qcloudAppId;
+
+ /**
+ * 鑵捐浜慡ecretId
+ */
+ private String qcloudSecretId;
+
+ /**
+ * 鑵捐浜慡ecretKey
+ */
+ private String qcloudSecretKey;
+
+ /**
+ * 鑵捐浜慍OS鎵�灞炲湴鍖�
+ */
+ private String qcloudRegion;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
new file mode 100644
index 0000000..ac4dff5
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
@@ -0,0 +1,43 @@
+package com.ruoyi.oss.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+public class CloudConstant {
+
+ /**
+ * 浜戝瓨鍌ㄩ厤缃甂EY
+ */
+ public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloud-storage";
+
+ /**
+ * 浜戞湇鍔″晢
+ */
+ @Getter
+ @AllArgsConstructor
+ public enum CloudService {
+
+ /**
+ * 涓冪墰浜�
+ */
+ QINIU(1),
+
+ /**
+ * 闃块噷浜�
+ */
+ ALIYUN(2),
+
+ /**
+ * 鑵捐浜�
+ */
+ QCLOUD(3),
+
+ /**
+ * minio
+ */
+ MINIO(4);
+
+ private final int value;
+ }
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/exception/OssException.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/exception/OssException.java
new file mode 100644
index 0000000..48ab618
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/exception/OssException.java
@@ -0,0 +1,16 @@
+package com.ruoyi.oss.exception;
+
+/**
+ * OSS寮傚父绫�
+ *
+ * @author Lion Li
+ */
+public class OssException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ public OssException(String msg) {
+ super(msg);
+ }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
new file mode 100644
index 0000000..19d623a
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
@@ -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);
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
new file mode 100644
index 0000000..cbdbd93
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
@@ -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;
+
+/**
+ * 浜戝瓨鍌�(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
+ */
+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;
+ }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
new file mode 100644
index 0000000..8fbe16c
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
@@ -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));
+ }
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
new file mode 100644
index 0000000..bf02831
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
@@ -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));
+ }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
new file mode 100644
index 0000000..6681310
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
@@ -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 鍗庡寳锛歵j 鍗庝笢锛歴h
+// 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));
+ }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
new file mode 100644
index 0000000..97a493f
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
@@ -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());
+ // 榛樿涓嶄娇鐢╤ttps
+ 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));
+ }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
new file mode 100644
index 0000000..eac88e8
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
@@ -0,0 +1,135 @@
+package com.ruoyi.oss.utils;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+
+import java.lang.management.ManagementFactory;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 鏃堕棿宸ュ叿绫�
+ *
+ * @author ruoyi
+ */
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
+ public static String YYYY = "yyyy";
+
+ public static String YYYY_MM = "yyyy-MM";
+
+ public static String YYYY_MM_DD = "yyyy-MM-dd";
+
+ public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+
+ public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+
+ private static String[] parsePatterns = {
+ "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
+ "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+ "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+ /**
+ * 鑾峰彇褰撳墠Date鍨嬫棩鏈�
+ *
+ * @return Date() 褰撳墠鏃ユ湡
+ */
+ public static Date getNowDate() {
+ return new Date();
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd
+ *
+ * @return String
+ */
+ public static String getDate() {
+ return dateTimeNow(YYYY_MM_DD);
+ }
+
+ public static final String getTime() {
+ return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+ }
+
+ public static final String dateTimeNow() {
+ return dateTimeNow(YYYYMMDDHHMMSS);
+ }
+
+ public static final String dateTimeNow(final String format) {
+ return parseDateToStr(format, new Date());
+ }
+
+ public static final String dateTime(final Date date) {
+ return parseDateToStr(YYYY_MM_DD, date);
+ }
+
+ public static final String parseDateToStr(final String format, final Date date) {
+ return new SimpleDateFormat(format).format(date);
+ }
+
+ public static final Date dateTime(final String format, final String ts) {
+ try {
+ return new SimpleDateFormat(format).parse(ts);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�2018/08/08
+ */
+ public static final String datePath() {
+ Date now = new Date();
+ return DateFormatUtils.format(now, "yyyy/MM/dd");
+ }
+
+ /**
+ * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�20180808
+ */
+ public static final String dateTime() {
+ Date now = new Date();
+ return DateFormatUtils.format(now, "yyyyMMdd");
+ }
+
+ /**
+ * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈� 鏍煎紡
+ */
+ public static Date parseDate(Object str) {
+ if (str == null) {
+ return null;
+ }
+ try {
+ return parseDate(str.toString(), parsePatterns);
+ } catch (ParseException e) {
+ return null;
+ }
+ }
+
+ /**
+ * 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂�
+ */
+ public static Date getServerStartDate() {
+ long time = ManagementFactory.getRuntimeMXBean().getStartTime();
+ return new Date(time);
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿宸�
+ */
+ public static String getDatePoor(Date endDate, Date nowDate) {
+ long nd = 1000 * 24 * 60 * 60;
+ long nh = 1000 * 60 * 60;
+ long nm = 1000 * 60;
+ // long ns = 1000;
+ // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮�
+ long diff = endDate.getTime() - nowDate.getTime();
+ // 璁$畻宸灏戝ぉ
+ long day = diff / nd;
+ // 璁$畻宸灏戝皬鏃�
+ long hour = diff % nd / nh;
+ // 璁$畻宸灏戝垎閽�
+ long min = diff % nd % nh / nm;
+ // 璁$畻宸灏戠//杈撳嚭缁撴灉
+ // long sec = diff % nd % nh % nm / ns;
+ return day + "澶�" + hour + "灏忔椂" + min + "鍒嗛挓";
+ }
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
new file mode 100644
index 0000000..28cea03
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
@@ -0,0 +1,58 @@
+package com.ruoyi.system.controller;
+
+
+import com.aliyun.oss.ServiceException;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysOss;
+import com.ruoyi.system.service.ISysOssService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏂囦欢涓婁紶 鎺у埗灞�
+ *
+ * @author chkj
+ * @date 2019-07-15
+ */
+@Slf4j
+@RestController
+@RequestMapping("/system/oss")
+public class SysOssController extends BaseController {
+
+ @Autowired
+ private ISysOssService iSysOssService;
+
+ /**
+ * 鏌ヨ鏂囦欢涓婁紶鍒楄〃
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(SysOss sysOss) {
+ List<SysOss> list = iSysOssService.list(sysOss);
+ return PageUtils.buildDataInfo(list);
+ }
+
+ /**
+ * 涓婁紶鍥剧墖
+ */
+ @PostMapping("/upload")
+ public AjaxResult upload(@RequestParam("file") MultipartFile file) {
+ if (file.isEmpty()) {
+ throw new CustomException("涓婁紶鏂囦欢涓嶈兘涓虹┖");
+ }
+ Map<String, String> json = iSysOssService.upload(file);
+ return AjaxResult.success(json);
+ }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java
new file mode 100644
index 0000000..406cc84
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java
@@ -0,0 +1,58 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 鏂囦欢涓婁紶琛� sys_oss
+ *
+ * @author chkj
+ * @date 2019-07-15
+ */
+@Data
+@Accessors(chain = true)
+@NoArgsConstructor
+@TableName("sys_oss")
+public class SysOss implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 鏂囦欢鍚�
+ */
+ private String fileName;
+
+ /**
+ * 鏂囦欢鍚庣紑鍚�
+ */
+ private String fileSuffix;
+
+ /**
+ * URL鍦板潃
+ */
+ private String url;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+ /**
+ * 涓婁紶浜�
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private String createBy;
+
+ /**
+ * 鏈嶅姟鍟�
+ */
+ private Integer service;
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java
new file mode 100644
index 0000000..ed28294
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.factory;
+
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
+
+/**
+ * 鏂囦欢涓婁紶Factory
+ */
+public class OSSFactory {
+
+// private static ISysConfigService sysConfigService;
+
+ static {
+// OSSFactory.sysConfigService = SpringUtils.getBean(ISysConfigService.class);
+ }
+
+ public static AbstractCloudStorageService build() {
+// String jsonconfig = sysConfigService.selectConfigByKey(CloudConstant.CLOUD_STORAGE_CONFIG_KEY);
+// // 鑾峰彇浜戝瓨鍌ㄩ厤缃俊鎭�
+// CloudStorageConfig config = JSON.parseObject(jsonconfig, CloudStorageConfig.class);
+// if (config.getType() == CloudConstant.CloudService.QINIU.getValue()) {
+// return new QiniuCloudStorageServiceImpl(config);
+// } else if (config.getType() == CloudConstant.CloudService.ALIYUN.getValue()) {
+// return new AliyunCloudStorageServiceImpl(config);
+// } else if (config.getType() == CloudConstant.CloudService.QCLOUD.getValue()) {
+// return new QcloudCloudStorageServiceImpl(config);
+// } else if (config.getType() == CloudConstant.CloudService.MINIO.getValue()) {
+// return new MinioCloudStorageServiceImpl(config);
+// }
+ return null;
+ }
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java b/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java
new file mode 100644
index 0000000..b1f1303
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java
@@ -0,0 +1,13 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.SysOss;
+
+/**
+ * 鏂囦欢涓婁紶 鏁版嵁灞�
+ *
+ * @author chkj
+ * @date 2019-07-15
+ */
+public interface SysOssMapper extends BaseMapper<SysOss> {
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java b/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java
new file mode 100644
index 0000000..4a71b2d
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.SysOss;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏂囦欢涓婁紶 鏈嶅姟灞�
+ *
+ * @author chkj
+ * @date 2019-07-15
+ */
+public interface ISysOssService extends IService<SysOss> {
+ /**
+ * 鍒楄〃鏌ヨ
+ */
+ List<SysOss> list(SysOss sysOss);
+
+ Map<String, String> upload(MultipartFile file);
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
new file mode 100644
index 0000000..729470a
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.oss.config.CloudStorageConfig;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
+import com.ruoyi.system.domain.SysOss;
+import com.ruoyi.system.factory.OSSFactory;
+import com.ruoyi.system.mapper.SysOssMapper;
+import com.ruoyi.system.service.ISysOssService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏂囦欢涓婁紶 鏈嶅姟灞傚疄鐜�
+ *
+ * @author chkj
+ * @date 2019-07-15
+ */
+@Slf4j
+@Service
+public class SysOssServiceImpl extends ServiceImpl<SysOssMapper, SysOss> implements ISysOssService {
+
+ @Autowired
+ private CloudStorageConfig config;
+
+ @Override
+ public List<SysOss> list(SysOss sysOss) {
+ LambdaQueryWrapper<SysOss> wrapper = new LambdaQueryWrapper<>();
+ return baseMapper.selectList(wrapper);
+ }
+
+ @Override
+ public Map<String, String> upload(MultipartFile file) {
+ String originalfileName = file.getOriginalFilename();
+ String suffix = originalfileName.substring(originalfileName.lastIndexOf("."));
+ try {
+ AbstractCloudStorageService storage = OSSFactory.build();
+ String url = storage.uploadSuffix(file.getBytes(), suffix);
+ // 淇濆瓨鏂囦欢淇℃伅
+ SysOss ossEntity = new SysOss()
+ .setUrl(url).setFileSuffix(suffix)
+ .setFileName(originalfileName)
+ .setService(storage.getServiceType());
+ save(ossEntity);
+ Map<String, String> map = new HashMap<>(2);
+ map.put("url", ossEntity.getUrl());
+ map.put("fileName", ossEntity.getFileName());
+ return map;
+ } catch (IOException e) {
+ throw new CustomException("鏂囦欢璇诲彇寮傚父!!!", e);
+ }
+ }
+
+}
diff --git a/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml b/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml
new file mode 100644
index 0000000..1af8bf1
--- /dev/null
+++ b/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.chkj.cloudStorage.mapper.SysOssMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.chkj.cloudStorage.domain.SysOss">
+ <id column="id" property="id"/>
+ <result column="file_name" property="fileName"/>
+ <result column="file_suffix" property="fileSuffix"/>
+ <result column="url" property="url"/>
+ <result column="create_time" property="createTime"/>
+ <result column="create_by" property="createBy"/>
+ <result column="service" property="service"/>
+ </resultMap>
+
+ <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+ <sql id="Base_Column_List">
+ id, file_name, file_suffix, url, create_time, create_by, service
+ </sql>
+
+</mapper>
diff --git a/ruoyi-oss/src/main/resources/sql/oss.sql b/ruoyi-oss/src/main/resources/sql/oss.sql
new file mode 100644
index 0000000..b49f08e
--- /dev/null
+++ b/ruoyi-oss/src/main/resources/sql/oss.sql
@@ -0,0 +1,30 @@
+CREATE TABLE `sys_oss`
+(
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `file_name` varchar(64) NOT NULL DEFAULT '' COMMENT '鏂囦欢鍚�',
+ `file_suffix` varchar(10) NOT NULL DEFAULT '' COMMENT '鏂囦欢鍚庣紑鍚�',
+ `url` varchar(200) NOT NULL COMMENT 'URL鍦板潃',
+ `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+ `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '涓婁紶浜�',
+ `service` tinyint(2) NOT NULL DEFAULT '1' COMMENT '鏈嶅姟鍟�',
+ PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 8
+ DEFAULT CHARSET = utf8 COMMENT ='鏂囦欢涓婁紶';
+
+INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
+ `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES ('鏂囦欢绠$悊', '1', '10', '/system/oss', 'C', '0', 'system:oss:view', '#', 'admin', '2018-11-16 13:59:45', '', NULL,
+ '');
+INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
+ `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES ('鏂囦欢涓婁紶', '1056', '1', '#', 'F', '0', 'system:oss:add', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
+INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
+ `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES ('鏂囦欢鍒犻櫎', '1056', '2', '#', 'F', '0', 'system:oss:remove', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
+INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
+ `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES ('鏂囦欢閰嶇疆', '1056', '3', '#', 'F', '0', 'system:oss:config', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
+INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
+ `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
+VALUES ('鏂囦欢淇敼', '1056', '4', '#', 'F', '0', 'system:oss:remove', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
--
Gitblit v1.9.3