疯狂的狮子li
2021-07-19 0a128e454cf644d094eccf4b8790f217f28e94f7
update 编写 Minio 实现 调整OSS模块结构
已修改15个文件
已添加2个文件
367 ■■■■ 文件已修改
docker/deploy.sh 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker/docker-compose.yml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/oss/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/oss.sql 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
}
#启动基础模块
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:
      # å°†mysql8.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:
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;
}
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;
}
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;
        /**
         * è…¾è®¯äº‘appId
         */
        private String appId;
        /**
         * è…¾è®¯äº‘SecretId
         */
        private String secretId;
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);
}
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;
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));
    }
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();
    }
}
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));
    }
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));
    }
ruoyi-oss/src/main/java/com/ruoyi/system/bo/SysOssQueryBo.java
@@ -44,6 +44,11 @@
    @ApiModelProperty("文件名")
    private String fileName;
    /**
     * åŽŸå
     */
    @ApiModelProperty("原名")
    private String originalName;
    /**
     * æ–‡ä»¶åŽç¼€å
     */
    @ApiModelProperty("文件后缀名")
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;
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);
ruoyi-oss/src/main/java/com/ruoyi/system/vo/SysOssVo.java
@@ -30,6 +30,12 @@
    private String fileName;
    /**
     * åŽŸå
     */
    @ApiModelProperty("原名")
    private String originalName;
    /**
     * æ–‡ä»¶åŽç¼€å
     */
    @ApiModelProperty("文件后缀名")
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,
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云存储表';