Browse Source

增加分布式文件FastDFS支持

tags/v2.3.0
RuoYi 4 years ago
parent
commit
2bb0eb1edb
  1. 57
      ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java
  2. 7
      ruoyi-modules/ruoyi-file/pom.xml
  3. 20
      ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
  4. 43
      ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java
  5. 2
      ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java
  6. 23
      ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java

57
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java

@ -20,6 +20,12 @@ import com.ruoyi.common.core.utils.StringUtils;
*/ */
public class FileUtils extends org.apache.commons.io.FileUtils 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]+"; public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
/** /**
@ -168,6 +174,57 @@ public class FileUtils extends org.apache.commons.io.FileUtils
} }
/** /**
* 返回文件名
*
* @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或者LinuxUnix文件分隔符<br>
* Windows平台下分隔符为\LinuxUnix/
*
* @param c 字符
* @return 是否为Windows或者LinuxUnix文件分隔符
*/
public static boolean isFileSeparator(char c)
{
return SLASH == c || BACKSLASH == c;
}
/**
* 下载文件名重新编码 * 下载文件名重新编码
* *
* @param response 响应对象 * @param response 响应对象

7
ruoyi-modules/ruoyi-file/pom.xml

@ -48,6 +48,13 @@
<version>${swagger.fox.version}</version> <version>${swagger.fox.version}</version>
</dependency> </dependency>
<!-- FastDFS -->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.5</version>
</dependency>
<!-- Ruoyi Common Security --> <!-- Ruoyi Common Security -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>

20
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java

@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.file.FileUtils;
import com.ruoyi.file.service.ISysFileService; import com.ruoyi.file.service.ISysFileService;
import com.ruoyi.system.api.domain.SysFile; import com.ruoyi.system.api.domain.SysFile;
@ -27,18 +28,6 @@ public class SysFileController
@Value("${file.path}") @Value("${file.path}")
private String localFilePath; private String localFilePath;
/**
* 资源映射路径 前缀
*/
@Value("${file.prefix}")
public String localFilePrefix;
/**
* 域名或本机访问地址
*/
@Value("${file.domain}")
public String domain;
@Autowired @Autowired
private ISysFileService sysFileService; private ISysFileService sysFileService;
@ -50,11 +39,10 @@ public class SysFileController
{ {
try try
{ {
// 上传并返回新文件名称 // 上传并返回访问地址
String fileName = sysFileService.uploadFile(file, localFilePath); String url = sysFileService.uploadFile(file, localFilePath);
String url = domain + localFilePrefix + fileName;
SysFile sysFile = new SysFile(); SysFile sysFile = new SysFile();
sysFile.setName(fileName); sysFile.setName(FileUtils.getName(url));
sysFile.setUrl(url); sysFile.setUrl(url);
return R.ok(sysFile); return R.ok(sysFile);
} }

43
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java

@ -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();
}
}

2
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java

@ -14,7 +14,7 @@ public interface ISysFileService
* *
* @param file 上传的文件 * @param file 上传的文件
* @param baseDir 相对应用的基目录 * @param baseDir 相对应用的基目录
* @return 文件名称 * @return 访问地址
* @throws Exception * @throws Exception
*/ */
public String uploadFile(MultipartFile file, String baseDir) throws Exception; public String uploadFile(MultipartFile file, String baseDir) throws Exception;

23
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java

@ -1,5 +1,7 @@
package com.ruoyi.file.service; 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.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.file.utils.FileUploadUtils; import com.ruoyi.file.utils.FileUploadUtils;
@ -9,19 +11,34 @@ import com.ruoyi.file.utils.FileUploadUtils;
* *
* @author ruoyi * @author ruoyi
*/ */
@Primary
@Service @Service
public class LocalSysFileServiceImpl implements ISysFileService public class LocalSysFileServiceImpl implements ISysFileService
{ {
/** /**
* 文件上传接口 * 资源映射路径 前缀
*/
@Value("${file.prefix}")
public String localFilePrefix;
/**
* 域名或本机访问地址
*/
@Value("${file.domain}")
public String domain;
/**
* 本地文件上传接口
* *
* @param file 上传的文件 * @param file 上传的文件
* @param baseDir 相对应用的基目录 * @param baseDir 相对应用的基目录
* @return 文件名称 * @return 访问地址
* @throws Exception * @throws Exception
*/ */
public String uploadFile(MultipartFile file, String baseDir) 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;
} }
} }

Loading…
Cancel
Save