Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

zszdevelop/java-file-server

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-file-server

1. Java 文件服务

java常见文件服务实现,封装统一常用 RESTful API,针对各文件服务特性提供特性service。

1.1 支持文件服务类型

  • 本地存储
  • Minio
  • FastDFS(开发中)
  • 阿里云存储(开发中)

1.2 文件 RESTful API

  • 文件上传

    POST http://localhost:9310/file/upload
    
  • 文件下载

    GET http://localhost:9310/file/download?fileName=2021/12/12/test.png
    
  • 预览文件(仅支持图片和Pdf)

    GET http://localhost:9310/file/preview?fileName=2021/12/12/test.png
    
  • 获取预览地址

    GET http://localhost:9310/file/getPreviewUrl?fileName=2021/12/12/test.png
    
    • Minio 实现可支持设置过期时间
  • 文件是否存在

    GET http://localhost:9310/file/exists?fileName=2021/12/12/test.png
    
  • 删除文件

    DELETE http://localhost:9310/file/delete?fileName=2021/12/12/test.png
    

2. 实现思路

  1. 文件controller

    提供统一的controller层,通过service接口调用不同的文件服务实现

  2. 文件service

    文件服务实现有很多种(本地存储、Minio、云存储等),每种类型除了支持正常上传、下载、预览、删除外。还提供了一些其他特性,并不希望我们的文件服务变得只支持通用API,对于平台特性的也能够支持。

    ├── service            								 // service层
    │   └── FileService                    // 通用文件服务接口
    |		└── LocalFileService               // 本地存储扩展接口-继承通用文件服务
    |		└── MinioFileService               // minio扩展接口-继承通用文件服务
    |		└──	impl
    |				└── LocalFileServiceImpl       // 本地存储实现
    |				└── MinioFileServiceImpl       // minio实现
    
  3. 返回结果封装

  • 各平台文件服务返回统一的结果,结果带有泛型支持,方便获取数据。

    public class FileResult<T> {
        // 错误码
        private Integer code;
        // 消息
        private String msg;
        // 返回结果
        private T data;
    }
  • 各平台的有特性返回,则通过FileInfo 继承 HashMap 进行扩展

    public class FileInfo extends HashMap<String, Object> {
    		...
    }
  1. 文件路径与重命名

    • 文件路径与重命名都在外部控制

    • 所有的service传的文件名,都是包含 文件的路径文件名(开发者决定是否重命名),方便开发者们制定自定义

    • 默认的文件名处理(日期+uuid)

       /**
           * 获取包含路径的文件名
           * TODO 此处根据项目实际情况处理,制定存储路径和重命名文件
           * @param file
           * @return
           */
          private String getNewPathFilename(MultipartFile file) {
              Date now = new Date();
              SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
              String datePath =  sdf.format(now);
              String extension = FileUtil.extName(file.getOriginalFilename());
      
              String pathFilename = datePath + File.separator + IdUtil.fastSimpleUUID() + "." + extension;
              return pathFilename;
          }

About

java文件服务

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.