From 0a128e454cf644d094eccf4b8790f217f28e94f7 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期一, 19 七月 2021 19:40:18 +0800 Subject: [PATCH] update 编写 Minio 实现 调整OSS模块结构 --- ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java | 9 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java | 122 ++++++++++++++++- ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java | 27 ++- ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java | 6 ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java | 24 +++ ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java | 9 ruoyi-ui/src/views/system/oss/index.vue | 12 + ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java | 18 +- docker/docker-compose.yml | 31 ++++ ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java | 5 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java | 51 +++++++ ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java | 9 docker/deploy.sh | 11 + sql/oss.sql | 5 ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java | 7 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java | 11 ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java | 10 17 files changed, 311 insertions(+), 56 deletions(-) diff --git a/docker/deploy.sh b/docker/deploy.sh index 3b6e696..79fb9ae 100644 --- a/docker/deploy.sh +++ b/docker/deploy.sh @@ -6,10 +6,17 @@ exit 1 } -#寮�鍚墍闇�绔彛 +#寮�鍚墍闇�绔彛(鐢熶骇鐜涓嶆帹鑽愬紑鍚�) port(){ + # mysql 绔彛 firewall-cmd --add-port=3306/tcp --permanent + # redis 绔彛 firewall-cmd --add-port=6379/tcp --permanent + # minio api 绔彛 + firewall-cmd --add-port=9000/tcp --permanent + # minio 鎺у埗鍙扮鍙� + firewall-cmd --add-port=9001/tcp --permanent + # 閲嶅惎闃茬伀澧� service firewalld restart } @@ -24,7 +31,7 @@ #鍚姩鍩虹妯″潡 base(){ - docker-compose up -d mysql nginx-web redis + docker-compose up -d mysql nginx-web redis minio } #鍚姩鍩虹妯″潡 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 63c46a4..b08c32d 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -18,6 +18,8 @@ - /docker/mysql/data/:/var/lib/mysql/ # 閰嶇疆鎸傝浇 - /docker/mysql/conf/:/etc/mysql/conf.d/ + # 涓绘満鏈満鏃堕棿鏂囦欢鏄犲皠 涓庢湰鏈烘椂闂村悓姝� + - /etc/localtime:/etc/localtime:ro command: # 灏唌ysql8.0榛樿瀵嗙爜绛栫暐 淇敼涓� 鍘熷厛 绛栫暐 (mysql8.0瀵瑰叾榛樿绛栫暐鍋氫簡鏇存敼 浼氬鑷村瘑鐮佹棤娉曞尮閰�) --default-authentication-plugin=mysql_native_password @@ -68,6 +70,8 @@ - /docker/redis/conf/redis.conf:/redis.conf:rw # 鏁版嵁鏂囦欢 - /docker/redis/data:/data:rw + # 涓绘満鏈満鏃堕棿鏂囦欢鏄犲皠 涓庢湰鏈烘椂闂村悓姝� + - /etc/localtime:/etc/localtime:ro command: "redis-server --appendonly yes" privileged: true restart: always @@ -75,6 +79,33 @@ ruoyi_net: ipv4_address: 172.30.0.48 + minio: + image: minio/minio:RELEASE.2021-07-08T01-15-01Z + hostname: "minio" + ports: + # api 绔彛 + - 9000:9000 + # 鎺у埗鍙扮鍙� + - 9001:9001 + environment: + # 绠$悊鍚庡彴鐢ㄦ埛鍚� + MINIO_ACCESS_KEY: ruoyi + # 绠$悊鍚庡彴瀵嗙爜锛屾渶灏�8涓瓧绗� + MINIO_SECRET_KEY: ruoyi123 + volumes: + # 鏄犲皠褰撳墠鐩綍涓嬬殑data鐩綍鑷冲鍣ㄥ唴/data鐩綍 + - /docker/minio/data:/data + # 鏄犲皠閰嶇疆鐩綍 + - /docker/minio/config:/root/.minio/ + # 涓绘満鏈満鏃堕棿鏂囦欢鏄犲皠 涓庢湰鏈烘椂闂村悓姝� + - /etc/localtime:/etc/localtime:ro + command: server --console-address ':9001' /data # 鎸囧畾瀹瑰櫒涓殑鐩綍 /data + privileged: true + restart: always + networks: + ruoyi_net: + ipv4_address: 172.30.0.54 + ruoyi-server1: image: "ruoyi/ruoyi-server:2.5.1" environment: diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java new file mode 100644 index 0000000..6d38882 --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java @@ -0,0 +1,24 @@ +package com.ruoyi.oss.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 涓婁紶杩斿洖浣� + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class UploadResult { + + /** + * 鏂囦欢璺緞 + */ + private String url; + + /** + * 鏂囦欢鍚� + */ + private String filename; +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java new file mode 100644 index 0000000..c10dceb --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 搴勯獮 (smallchill@163.com) + */ +package com.ruoyi.oss.enumd; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * minio绛栫暐閰嶇疆 + * + * @author Lion Li + */ +@Getter +@AllArgsConstructor +public enum PolicyType { + + /** + * 鍙 + */ + READ("read-only"), + + /** + * 鍙啓 + */ + WRITE("write-only"), + + /** + * 璇诲啓 + */ + READ_WRITE("read-write"); + + /** + * 绫诲瀷 + */ + private final String type; + +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java index 0bf134f..50053e8 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java @@ -69,27 +69,22 @@ public static class MinioProperties { /** - * 涓冪墰缁戝畾鐨勫煙鍚� + * minio鍩熷悕 */ private String endpoint; /** - * 涓冪墰璺緞鍓嶇紑 - */ - private String prefix; - - /** - * 涓冪墰ACCESS_KEY + * minio ACCESS_KEY */ private String accessKey; /** - * 涓冪墰SECRET_KEY + * minio SECRET_KEY */ private String secretKey; /** - * 涓冪墰瀛樺偍绌洪棿鍚� + * minio 瀛樺偍绌洪棿鍚� */ private String bucketName; @@ -115,6 +110,11 @@ private String prefix; /** + * 鑵捐浜慳ppId + */ + private String appId; + + /** * 鑵捐浜慡ecretId */ private String secretId; 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 index a6a29c7..700bf3f 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java @@ -1,5 +1,7 @@ package com.ruoyi.oss.service; +import com.ruoyi.oss.entity.UploadResult; + import java.io.InputStream; /** @@ -30,7 +32,7 @@ * @param path 鏂囦欢璺緞锛屽寘鍚枃浠跺悕 * @return 杩斿洖http鍦板潃 */ - String upload(byte[] data, String path); + UploadResult upload(byte[] data, String path); /** * 鏂囦欢鍒犻櫎 @@ -46,7 +48,7 @@ * @param suffix 鍚庣紑 * @return 杩斿洖http鍦板潃 */ - String uploadSuffix(byte[] data, String suffix); + UploadResult uploadSuffix(byte[] data, String suffix); /** * 鏂囦欢涓婁紶 @@ -55,7 +57,7 @@ * @param path 鏂囦欢璺緞锛屽寘鍚枃浠跺悕 * @return 杩斿洖http鍦板潃 */ - String upload(InputStream inputStream, String path); + UploadResult upload(InputStream inputStream, String path); /** * 鏂囦欢涓婁紶 @@ -64,5 +66,5 @@ * @param suffix 鍚庣紑 * @return 杩斿洖http鍦板潃 */ - String uploadSuffix(InputStream inputStream, String suffix); + UploadResult 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 index a154670..42f44e1 100644 --- 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 @@ -4,6 +4,7 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.service.ICloudStorageService; import org.springframework.beans.factory.InitializingBean; @@ -33,22 +34,22 @@ } @Override - public abstract String upload(byte[] data, String path); + public abstract UploadResult upload(byte[] data, String path); @Override public abstract void delete(String path); @Override - public String upload(InputStream inputStream, String path) { + public UploadResult upload(InputStream inputStream, String path) { byte[] data = IoUtil.readBytes(inputStream); return this.upload(data, path); } @Override - public abstract String uploadSuffix(byte[] data, String suffix); + public abstract UploadResult uploadSuffix(byte[] data, String suffix); @Override - public abstract String uploadSuffix(InputStream inputStream, String suffix); + public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix); @Override public abstract void afterPropertiesSet() throws Exception; 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 index 6a84dde..e6733c9 100644 --- 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 @@ -3,6 +3,7 @@ import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.auth.DefaultCredentialProvider; +import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.enumd.CloudServiceEnumd; import com.ruoyi.oss.exception.OssException; import com.ruoyi.oss.factory.OssFactory; @@ -49,18 +50,18 @@ } @Override - public String upload(byte[] data, String path) { + public UploadResult upload(byte[] data, String path) { return upload(new ByteArrayInputStream(data), path); } @Override - public String upload(InputStream inputStream, String path) { + public UploadResult upload(InputStream inputStream, String path) { try { client.putObject(this.properties.getBucketName(), path, inputStream); } catch (Exception e) { throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ厤缃俊鎭�"); } - return this.properties.getEndpoint() + "/" + path; + return new UploadResult().setUrl(properties.getEndpoint() + "/" + path).setFilename(path); } @Override @@ -74,12 +75,12 @@ } @Override - public String uploadSuffix(byte[] data, String suffix) { + public UploadResult uploadSuffix(byte[] data, String suffix) { return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override - public String uploadSuffix(InputStream inputStream, String suffix) { + public UploadResult uploadSuffix(InputStream inputStream, String suffix) { return upload(inputStream, getPath(this.properties.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 index bca97df..e53c77c 100644 --- 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 @@ -1,17 +1,20 @@ package com.ruoyi.oss.service.impl; +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 io.minio.MinioClient; +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.stereotype.Service; +import java.io.ByteArrayInputStream; import java.io.InputStream; /** @@ -34,6 +37,16 @@ .endpoint(this.properties.getEndpoint()) .credentials(this.properties.getAccessKey(), this.properties.getSecretKey()) .build(); + String bucketName = this.properties.getBucketName(); + boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); + // 涓嶅瓨鍦ㄥ氨鍒涘缓妗� + if (!exists) { + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); + minioClient.setBucketPolicy(SetBucketPolicyArgs.builder() + .bucket(bucketName) + .config(getPolicy(bucketName, PolicyType.READ)) + .build()); + } } catch (Exception e) { throw new IllegalArgumentException("Minio瀛樺偍閰嶇疆閿欒! 璇锋鏌ョ郴缁熼厤缃�!"); } @@ -45,36 +58,125 @@ } @Override - public String upload(byte[] data, String path) { - try { + public UploadResult upload(byte[] data, String path) { + return upload(new ByteArrayInputStream(data), path); + } + @Override + public UploadResult upload(InputStream inputStream, String path) { + try { + minioClient.putObject(PutObjectArgs.builder() + .bucket(properties.getBucketName()) + .object(path) + .contentType("application/octet-stream") + .stream(inputStream, inputStream.available(), -1) + .build()); } catch (Exception e) { throw new OssException("涓婁紶鏂囦欢澶辫触锛岃鏍稿Minio閰嶇疆淇℃伅"); } - return this.properties.getEndpoint() + "/" + path; + return new UploadResult().setUrl(getBaseUrl() + path).setFilename(path); } @Override public void delete(String path) { + path = path.replace(getBaseUrl(), ""); try { - + minioClient.removeObject(RemoveObjectArgs.builder() + .bucket(properties.getBucketName()) + .object(path) + .build()); } catch (Exception e) { throw new OssException(e.getMessage()); } } @Override - public String uploadSuffix(byte[] data, String suffix) { - return upload(data, getPath(this.properties.getPrefix(), suffix)); + public UploadResult uploadSuffix(byte[] data, String suffix) { + return upload(data, getPath("", suffix)); } @Override - public String uploadSuffix(InputStream inputStream, String suffix) { - return upload(inputStream, getPath(this.properties.getPrefix(), suffix)); + public UploadResult uploadSuffix(InputStream inputStream, String suffix) { + return upload(inputStream, getPath("", suffix)); } @Override public void afterPropertiesSet() throws Exception { - OssFactory.register(getServiceType(),this); + OssFactory.register(getServiceType(), this); + } + + private String getBaseUrl() { + return properties.getEndpoint() + "/" + properties.getBucketName() + "/"; + } + + private String getPolicy(String bucketName, PolicyType policyType) { + StringBuilder builder = new StringBuilder(); + builder.append("{\n"); + builder.append(" \"Statement\": [\n"); + builder.append(" {\n"); + builder.append(" \"Action\": [\n"); + if (policyType == PolicyType.WRITE) { + builder.append(" \"s3:GetBucketLocation\",\n"); + builder.append(" \"s3:ListBucketMultipartUploads\"\n"); + } else if (policyType == PolicyType.READ_WRITE) { + builder.append(" \"s3:GetBucketLocation\",\n"); + builder.append(" \"s3:ListBucket\",\n"); + builder.append(" \"s3:ListBucketMultipartUploads\"\n"); + } else { + builder.append(" \"s3:GetBucketLocation\"\n"); + } + builder.append(" ],\n"); + builder.append(" \"Effect\": \"Allow\",\n"); + builder.append(" \"Principal\": \"*\",\n"); + builder.append(" \"Resource\": \"arn:aws:s3:::"); + builder.append(bucketName); + builder.append("\"\n"); + builder.append(" },\n"); + if (PolicyType.READ.equals(policyType)) { + builder.append(" {\n"); + builder.append(" \"Action\": [\n"); + builder.append(" \"s3:ListBucket\"\n"); + builder.append(" ],\n"); + builder.append(" \"Effect\": \"Deny\",\n"); + builder.append(" \"Principal\": \"*\",\n"); + builder.append(" \"Resource\": \"arn:aws:s3:::"); + builder.append(bucketName); + builder.append("\"\n"); + builder.append(" },\n"); + } + builder.append(" {\n"); + builder.append(" \"Action\": "); + switch (policyType) { + case WRITE: + builder.append("[\n"); + builder.append(" \"s3:AbortMultipartUpload\",\n"); + builder.append(" \"s3:DeleteObject\",\n"); + builder.append(" \"s3:ListMultipartUploadParts\",\n"); + builder.append(" \"s3:PutObject\"\n"); + builder.append(" ],\n"); + break; + case READ_WRITE: + builder.append("[\n"); + builder.append(" \"s3:AbortMultipartUpload\",\n"); + builder.append(" \"s3:DeleteObject\",\n"); + builder.append(" \"s3:GetObject\",\n"); + builder.append(" \"s3:ListMultipartUploadParts\",\n"); + builder.append(" \"s3:PutObject\"\n"); + builder.append(" ],\n"); + break; + default: + builder.append("\"s3:GetObject\",\n"); + break; + } + builder.append(" \"Effect\": \"Allow\",\n"); + builder.append(" \"Principal\": \"*\",\n"); + builder.append(" \"Resource\": \"arn:aws:s3:::"); + builder.append(bucketName); + builder.append("/*\"\n"); + builder.append(" }\n"); + builder.append(" ],\n"); + builder.append(" \"Version\": \"2012-10-17\"\n"); + builder.append("}\n"); + return builder.toString(); } } 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 index 3b367b7..883f10e 100644 --- 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 @@ -5,6 +5,7 @@ import com.qcloud.cos.auth.BasicCOSCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.region.Region; +import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.enumd.CloudServiceEnumd; import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.properties.CloudStorageProperties; @@ -52,7 +53,7 @@ } @Override - public String upload(byte[] data, String path) { + public UploadResult upload(byte[] data, String path) { // 鑵捐浜戝繀闇�瑕佷互"/"寮�澶� if (!path.startsWith("/")) { path = "/" + path; @@ -64,7 +65,7 @@ // if (Convert.toInt(jsonObject.get("code")) != 0) { // throw new OssException("鏂囦欢涓婁紶澶辫触锛�" + Convert.toStr(jsonObject.get("message"))); // } - return this.properties.getDomain() + path; + return new UploadResult().setUrl(properties.getDomain() + "/" + path).setFilename(path); } @Override @@ -79,12 +80,12 @@ } @Override - public String uploadSuffix(byte[] data, String suffix) { + public UploadResult uploadSuffix(byte[] data, String suffix) { return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override - public String uploadSuffix(InputStream inputStream, String suffix) { + public UploadResult uploadSuffix(InputStream inputStream, String suffix) { return upload(inputStream, getPath(this.properties.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 index ee4e4ab..91a852e 100644 --- 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 @@ -6,6 +6,7 @@ import com.qiniu.storage.Region; import com.qiniu.storage.UploadManager; 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; @@ -59,7 +60,7 @@ } @Override - public String upload(byte[] data, String path) { + public UploadResult upload(byte[] data, String path) { try { Response res = uploadManager.put(data, path, token); if (!res.isOK()) { @@ -68,7 +69,7 @@ } catch (Exception e) { throw new OssException("涓婁紶鏂囦欢澶辫触锛岃鏍稿涓冪墰閰嶇疆淇℃伅"); } - return this.properties.getDomain() + "/" + path; + return new UploadResult().setUrl(properties.getDomain() + "/" + path).setFilename(path); } @Override @@ -85,12 +86,12 @@ } @Override - public String uploadSuffix(byte[] data, String suffix) { + public UploadResult uploadSuffix(byte[] data, String suffix) { return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override - public String uploadSuffix(InputStream inputStream, String suffix) { + public UploadResult uploadSuffix(InputStream inputStream, String suffix) { return upload(inputStream, getPath(this.properties.getPrefix(), suffix)); } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java b/ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java index b96e790..a5f35c8 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java @@ -44,6 +44,11 @@ @ApiModelProperty("鏂囦欢鍚�") private String fileName; /** + * 鍘熷悕 + */ + @ApiModelProperty("鍘熷悕") + private String originalName; + /** * 鏂囦欢鍚庣紑鍚� */ @ApiModelProperty("鏂囦欢鍚庣紑鍚�") 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 index a99d973..7b7639c 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java @@ -25,7 +25,7 @@ /** * 浜戝瓨鍌ㄤ富閿� */ - @TableId(value = "oss_id") + @TableId(value = "oss_id", type = IdType.AUTO) private Long ossId; /** @@ -34,6 +34,11 @@ private String fileName; /** + * 鍘熷悕 + */ + private String originalName; + + /** * 鏂囦欢鍚庣紑鍚� */ private String fileSuffix; 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 index eacd8a0..994458b 100644 --- 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 @@ -8,6 +8,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.service.ICloudStorageService; import com.ruoyi.system.bo.SysOssQueryBo; @@ -41,10 +42,11 @@ Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery(); lqw.like(StrUtil.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); + lqw.like(StrUtil.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); lqw.eq(StrUtil.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix()); lqw.eq(StrUtil.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl()); lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, - SysOss::getCreateTime ,params.get("beginCreateTime"), params.get("endCreateTime")); + SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); lqw.eq(StrUtil.isNotBlank(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); lqw.eq(StrUtil.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); return lqw; @@ -54,24 +56,27 @@ public SysOss upload(MultipartFile file) { String originalfileName = file.getOriginalFilename(); String suffix = StrUtil.sub(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); + ICloudStorageService storage = OssFactory.instance(); + UploadResult uploadResult; try { - ICloudStorageService storage = OssFactory.instance(); - String url = storage.uploadSuffix(file.getBytes(), suffix); - // 淇濆瓨鏂囦欢淇℃伅 - SysOss oss = new SysOss() - .setUrl(url).setFileSuffix(suffix) - .setFileName(originalfileName) - .setService(storage.getServiceType()); - save(oss); - return oss; + uploadResult = storage.uploadSuffix(file.getBytes(), suffix); } catch (IOException e) { throw new CustomException("鏂囦欢璇诲彇寮傚父!!!", e); } + // 淇濆瓨鏂囦欢淇℃伅 + SysOss oss = new SysOss() + .setUrl(uploadResult.getUrl()) + .setFileSuffix(suffix) + .setFileName(uploadResult.getFilename()) + .setOriginalName(originalfileName) + .setService(storage.getServiceType()); + save(oss); + return oss; } @Override public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ + if (isValid) { // 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } List<SysOss> list = listByIds(ids); diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java b/ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java index 948b954..db4f28f 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java @@ -30,6 +30,12 @@ private String fileName; /** + * 鍘熷悕 + */ + @ApiModelProperty("鍘熷悕") + private String originalName; + + /** * 鏂囦欢鍚庣紑鍚� */ @ApiModelProperty("鏂囦欢鍚庣紑鍚�") diff --git a/ruoyi-ui/src/views/system/oss/index.vue b/ruoyi-ui/src/views/system/oss/index.vue index ce888f6..0ad14cb 100644 --- a/ruoyi-ui/src/views/system/oss/index.vue +++ b/ruoyi-ui/src/views/system/oss/index.vue @@ -10,6 +10,15 @@ @keyup.enter.native="handleQuery" /> </el-form-item> + <el-form-item label="鍘熷悕" prop="originalName"> + <el-input + v-model="queryParams.originalName" + placeholder="璇疯緭鍏ュ師鍚�" + clearable + size="small" + @keyup.enter.native="handleQuery" + /> + </el-form-item> <el-form-item label="鏂囦欢鍚庣紑" prop="fileSuffix"> <el-input v-model="queryParams.fileSuffix" @@ -84,6 +93,7 @@ <el-table-column type="selection" width="55" align="center" /> <el-table-column label="浜戝瓨鍌ㄤ富閿�" align="center" prop="ossId" v-if="false"/> <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" /> + <el-table-column label="鍘熷悕" align="center" prop="originalName" /> <el-table-column label="鏂囦欢鍚庣紑鍚�" align="center" prop="fileSuffix" /> <el-table-column label="URL鍦板潃" align="center" prop="url" /> <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180"> @@ -172,6 +182,7 @@ pageNum: 1, pageSize: 10, fileName: undefined, + originalName: undefined, fileSuffix: undefined, url: undefined, createTime: undefined, @@ -217,6 +228,7 @@ ossId: undefined, file: undefined, fileName: undefined, + originalName: undefined, fileSuffix: undefined, url: undefined, createTime: undefined, diff --git a/sql/oss.sql b/sql/oss.sql index 1b59348..4e3d8f0 100644 --- a/sql/oss.sql +++ b/sql/oss.sql @@ -5,12 +5,13 @@ create table sys_oss ( oss_id bigint(20) not null auto_increment comment '浜戝瓨鍌ㄤ富閿�', file_name varchar(64) not null default '' comment '鏂囦欢鍚�', + original_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 '涓婁紶浜�', + create_by varchar(64) default '' comment '涓婁紶浜�', update_time datetime default null comment '鏇存柊鏃堕棿', - update_by varchar(64) not null default '' comment '鏇存柊浜�', + update_by varchar(64) default '' comment '鏇存柊浜�', service varchar(10) not null default 'minio' comment '鏈嶅姟鍟�', primary key (oss_id) ) engine=innodb comment ='OSS浜戝瓨鍌ㄨ〃'; -- Gitblit v1.9.3