RuoYi
2020-11-19 2bb0eb1edb58d27450fb9f166b3f22b1fc031389
增加分布式文件FastDFS支持
1 files added
5 files modified
152 ■■■■ changed files
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java 57 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-file/pom.xml 7 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java 20 ●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java 43 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java 2 ●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java 23 ●●●● patch | view | raw | blame | history
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java
@@ -20,6 +20,12 @@
 */
public class FileUtils extends org.apache.commons.io.FileUtils
{
    /** 字符常量:斜杠 {@code '/'} */
    public static final char SLASH = '/';
    /** 字符常量:反斜杠 {@code '\\'} */
    public static final char BACKSLASH = '\\';
    public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
    /**
@@ -168,6 +174,57 @@
    }
    /**
     * 返回文件名
     *
     * @param filePath 文件
     * @return 文件名
     */
    public static String getName(String filePath)
    {
        if (null == filePath)
        {
            return null;
        }
        int len = filePath.length();
        if (0 == len)
        {
            return filePath;
        }
        if (isFileSeparator(filePath.charAt(len - 1)))
        {
            // 以分隔符结尾的去掉结尾分隔符
            len--;
        }
        int begin = 0;
        char c;
        for (int i = len - 1; i > -1; i--)
        {
            c = filePath.charAt(i);
            if (isFileSeparator(c))
            {
                // 查找最后一个路径分隔符(/或者\)
                begin = i + 1;
                break;
            }
        }
        return filePath.substring(begin, len);
    }
    /**
     * 是否为Windows或者Linux(Unix)文件分隔符<br>
     * Windows平台下分隔符为\,Linux(Unix)为/
     *
     * @param c 字符
     * @return 是否为Windows或者Linux(Unix)文件分隔符
     */
    public static boolean isFileSeparator(char c)
    {
        return SLASH == c || BACKSLASH == c;
    }
    /**
     * 下载文件名重新编码
     *
     * @param response 响应对象
ruoyi-modules/ruoyi-file/pom.xml
@@ -48,6 +48,13 @@
            <version>${swagger.fox.version}</version>
        </dependency>
        
        <!-- FastDFS -->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.5</version>
        </dependency>
        <!-- Ruoyi Common Security -->
        <dependency>
            <groupId>com.ruoyi</groupId>
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
@@ -8,6 +8,7 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.file.FileUtils;
import com.ruoyi.file.service.ISysFileService;
import com.ruoyi.system.api.domain.SysFile;
@@ -27,18 +28,6 @@
    @Value("${file.path}")
    private String localFilePath;
    /**
     * 资源映射路径 前缀
     */
    @Value("${file.prefix}")
    public String localFilePrefix;
    /**
     * 域名或本机访问地址
     */
    @Value("${file.domain}")
    public String domain;
    @Autowired
    private ISysFileService sysFileService;
@@ -50,11 +39,10 @@
    {
        try
        {
            // 上传并返回新文件名称
            String fileName = sysFileService.uploadFile(file, localFilePath);
            String url = domain + localFilePrefix + fileName;
            // 上传并返回访问地址
            String url = sysFileService.uploadFile(file, localFilePath);
            SysFile sysFile = new SysFile();
            sysFile.setName(fileName);
            sysFile.setName(FileUtils.getName(url));
            sysFile.setUrl(url);
            return R.ok(sysFile);
        }
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.file.service;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
/**
 * FastDFS文件存储
 *
 * @author ruoyi
 */
@Service
public class FastDfsSysFileServiceImpl implements ISysFileService
{
    /**
     * 域名或本机访问地址
     */
    @Value("${fdfs.domain}")
    public String domain;
    @Autowired
    private FastFileStorageClient storageClient;
    /**
     * FastDfs文件上传接口
     *
     * @param file 上传的文件
     * @param baseDir 相对应用的基目录
     * @return 访问地址
     * @throws Exception
     */
    @Override
    public String uploadFile(MultipartFile file, String baseDir) throws Exception
    {
        StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
                FilenameUtils.getExtension(file.getOriginalFilename()), null);
        return domain + "/" + storePath.getFullPath();
    }
}
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java
@@ -14,7 +14,7 @@
     * 
     * @param file 上传的文件
     * @param baseDir 相对应用的基目录
     * @return 文件名称
     * @return 访问地址
     * @throws Exception
     */
    public String uploadFile(MultipartFile file, String baseDir) throws Exception;
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.file.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.file.utils.FileUploadUtils;
@@ -9,19 +11,34 @@
 * 
 * @author ruoyi
 */
@Primary
@Service
public class LocalSysFileServiceImpl implements ISysFileService
{
    /**
     * 文件上传接口
     * 资源映射路径 前缀
     */
    @Value("${file.prefix}")
    public String localFilePrefix;
    /**
     * 域名或本机访问地址
     */
    @Value("${file.domain}")
    public String domain;
    /**
     * 本地文件上传接口
     * 
     * @param file 上传的文件
     * @param baseDir 相对应用的基目录
     * @return 文件名称
     * @return 访问地址
     * @throws Exception
     */
    public String uploadFile(MultipartFile file, String baseDir) throws Exception
    {
        return FileUploadUtils.upload(baseDir, file);
        String name = FileUploadUtils.upload(baseDir, file);
        String url = domain + localFilePrefix + name;
        return url;
    }
}