#IT 스타는 실제 개발 웹 개발 SpringBoot 멀티 파트 업로드 및 다운로드 파일을 시작하는 꿈 # [0] 아닙니다

내용 :

A, SpringBoot 구성 여러 부분

둘째, 패키지 파일 작업 FileHelper.java

셋째, 업로드 및 다운로드 API 개발 FileController.java

네, 단위 테스트 FileControllerTest.java을

V. 확장

여섯, 일반적인 문제 및 솔루션


오픈 소스 프로젝트 : https://github.com/jextop/StarterApi


SpringBoot는 일반적으로 자바 개발 프레임 워크, 구성 요소의 매우 풍부한이있는 경우 사용 및 사용 기능의 용이성이다. 다중 서버에 파일을 업로드 지원 클라이언트에 사용되는 서버는 로컬 또는 클라우드에 저장 한 파일 스트림의 내용의 요청을 가져옵니다. 시스템 아키텍처 다이어그램은 다음과 같습니다 :

의 image.png

다음 관련된 주요 클래스 및 인터페이스 :

의 image.png

개발 단계 :


코드 파일

기능 점수

SpringBoot 구성 여러 부분

application.yml

SpringBoot 웹 의존도는 다중 application.yml으로 배열 도입되었습니다

ServerConfig.java

서비스 주소를 읽어 들여, URL 접합

MultipartConfig.java

파일 저장, 로컬 스토리지 주소를 읽어

파일 작업

FileHelper의 된 .java

읽기 및 쓰기 파일뿐만 아니라 보조 기능

API 개발

파일 컨트롤러 된 .java

增加REST接口POST /upload/{file}, GET /download/{name}

单元测试

FileControllerTest.java

测试功能,MockHttpServletResponse, MockMultipartFile

功能扩展

集成DB读写功能,建立数据表File

在数据库中存储文件名称,MD5等信息,上传时判断MD5一样就重用,下载时返回源文件名。

FileTypeEnum.java

声明文件类型,归类存储

LocationEnum.java

支持本地或云端存储,比如阿里云、七牛云


一,SpringBoot配置Multipart

1. SpringBoot Web项目,已经包含了Multipart依赖,需要在application.yml中配置如下,开启multipart功能,指定文件大小范围和存储路径:

spring:
  servlet:
    multipart:
      enabled: true
      location: files
      file-size-threshold: 0B
      max-file-size: 10MB
      max-request-size: 10MB

2. 配置ServerConfig,读取API服务的IP地址或者域名,在返回文件信息时拼接url。

3. 配置MultipartConfig,读取文件存储路径,FileHelper写入文件时使用。


二,封装文件操作

文件读写,生成存储路径和网络url,实现代码详见FileHelper.java

1. save()将MultipartFile文件流保存到服务器或云端。

2. read()将文件内容读出并写如HttpServletResponse中。

3. getFilePath()得到文件存储路径。

4. getFileUrl()得到访问文件的网络url


三,上传下载API开发FileController.java

增加两个REST接口,上传接口/file/upload是POST请求,处理单个或者多个文件;下载接口/file/download/{name}是GET请求,name是根据文件唯一编号+扩展名生成的名称。实现代码详见FileController.java

@RestController
@RequestMapping("/file")
public class FileController {
    @PostMapping("/upload")
    public Object upload(
            @RequestParam(value = "file", required = false) MultipartFile file,
            @RequestParam(value = "files", required = false) MultipartFile[] files
    ) {
        if (file != null) {
            LogUtil.info("/file/upload", file.getName());
        }

        if (!EmptyUtil.isEmpty(files)) {
            LogUtil.info("/file/upload", files.length);
        }
    }

    @GetMapping("/{name}")
    public Object download(HttpServletResponse response, @PathVariable("name") String name) {
        LogUtil.info("/file", name);
    }
}

1,文件上传时首先根据内容生成MD5,通过MD5判断文件是否重复,然后保存文件并记录信息到数据库,返回文件url,时序图如下。


问答:为什么要保存文件信息到数据库?

- 首先将文件MD5保存起来,可以有效的避免文件重复。

- 存储在服务器时,文件名称使用一个新生成的唯一编号,这个编号也是url关键字。

- 文件原名保存到数据库,下载时可以返回给客户端。

의 image.png

2,下载文件时,从请求参数中获取文件编号,根据服务器存储路径查找文件。通过根据文件编号在数据库中查询并返回信息,流程图如下。

의 image.png

四,单元测试FileControllerTest.java

Spring框架提供了Mock功能辅助测试HTTP,我们用到org.springframework.mock.web包中的两个类:MockMultipartFile在上传时模拟文件,MockHttpServletResponse在下载时模拟HttpResponse响应。

1,创建一个临时文件,然后构建一个MockMultipartFile,测试upload()函数时传入。

File file = File.createTempFile("tmp", ".txt");
FileUtil.write(file.getPath(), "tmp file".getBytes());


MockMultipartFile multipart = new MockMultipartFile(
        file.getName(), file.getName(), null,
        new FileInputStream(file)
);

Object ret = fileController.doUpload(multipart, null);

2,新建一个MockHttpServletResponse实例,传入download()函数,将下载文件内容写入Response。

HttpServletResponse response = new MockHttpServletResponse();
Object ret = fileController.download(response, f200216377344237183100944.jpg);

3,运行FileControllerTest.java,,测试结果:

의 image.png

五,功能扩展

1. 存储文件时,将文件信息和MD5存入数据库,MD5用于检查重复文件,文件原名称等信息在下载时返回。

2. 文件存储时使用新生成的唯一编号作为文件名称,编号也是网络url关键字。

3. 文件存储可以扩展到云端,比如阿里云、七牛云,在FileController的upload()和download()函数流程中切换。


六,常见问题和解决方法

如何高效率的调试REST接口?

解决:有多种方法和API调式工具可用,介绍3个方式:

도 1은 단위 테스트 : 상기 도입은 스프링 프레임 워크 유닛 주요 기능을 다루는 기능을 테스트 및 자동 구성 시스템 및 통합 보조 HTTP 모의 기능 테스트를 제공하고, 버그 코드 및 변경, 품질 보증 프로그램에 의한 기능적 결함을 찾아 낼 수있다.

의 image.png

2, 자신감 인터페이스 문서 및 전화 : 자신감 프레임 워크를 정의 완전한 REST 인터페이스 문서 사양, 유지 보수 설명서를 허용 능력을 테스트하는 강력한 페이지, 디버그 및 시각화 API 인터페이스를 서비스 할 수있는 기능, 그리고 코드로 문서의 통합을 제공하며 코드 통합을 수정 전체 쉽게 문서를 수정 된 코드 로직 수정하면서 있도록.


브라우저를 엽니 다 // localhost를 : 8011 / 자신감 HTTP -ui.html, 확장 인터페이스 정보는 다음 파일을 선택하고 " 는 IT를 OU를보십시오! "

의 image.png

3, 우체부는 디버깅 툴 공통 API, 방법 및 요청 구성 환경 변수의 다양한 지원하고, 일괄 자동화, 자동 구축 및 시스템 통합, 효율적인을 가져 오거나 내보낼 JSON 파일 수는 없습니다 실행하기위한 테스트 검증, 지원의 결과를 반환 팀웍입니다.

의 image.png

추천

출처blog.51cto.com/13851865/2471526