Java的新项目学成在线笔记-day13(十二)

6.3.3.5 after-send-file 
在所有分块上传完成后触发,可以请求服务端合并分块文件
参考代码如下:

[AppleScript] 纯文本查看 复制代码

?

1

2

3

4

5

6

7

type:"POST",

扫描二维码关注公众号,回复: 6456176 查看本文章

 url:"/api/media/upload/mergechunks", data:{

  fileMd5:this.fileMd5, 

 fileName: file.name,

  fileSize:file.size, 

 mimetype:file.type,

  fileExt:file.ext }


6.3.3.6 页面效果 
 
6.3.4 Api接口 
定义文件上传的Api接口,此接收是前端WebUploader调用服务端的接口。 编写此接口需要参数前端WebUploader应用代码。
 

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

Api(value = "媒资管理接口",description = "媒资管理接口,提供文件上传,文件处理等接口") public interface MediaUploadControllerApi {   

   @ApiOperation("文件上传注册")   

 public ResponseResult register(String fileMd5,         

                          String fileName,         

                          Long fileSize,                      

             String mimetype,                      

             String fileExt);   

   @ApiOperation("分块检查")  

  public CheckChunkResult checkchunk(String fileMd5,     

                                  Integer chunk,     

                                  Integer chunkSize);   

 @ApiOperation("上传分块")  

  public ResponseResult uploadchunk(MultipartFile file,   

                                   Integer chunk,               

                       String fileMd5);   

 @ApiOperation("合并文件")  

  public ResponseResult mergechunks(String fileMd5,     

                                 String fileName,     

                                 Long fileSize,           

                           String mimetype,           

                           String fileExt);  


6.3.5媒资服务端编写
6.3.5.1 业务流程 
服务端需要实现如下功能:
1、上传前检查上传环境
检查文件是否上传,已上传则直接返回。
检查文件上传路径是否存在,不存在则创建。
2、分块检查 检查分块文件是否上传,已上传则返回true。
未上传则检查上传路径是否存在,不存在则创建。
3、分块上传
将分块文件上传到指定的路径。
4、合并分块
将所有分块文件合并为一个文件。
在数据库记录文件信息。
  6.3.5.2 上传注册 
由于上传过程复杂,开发时按业务流程分别实现。
1、配置 application.yml配置上传文件的路径:
 

[AppleScript] 纯文本查看 复制代码

?

1

2

xc‐service‐manage‐media:

   upload‐location: F:/develop/video/


2、定义Dao 媒资文件管理Dao
 

[AppleScript] 纯文本查看 复制代码

?

1

2

public interface MediaFileRepository extends MongoRepository<MediaFile,String> { 

 }


3、Service
功能:
1)检查上传文件是否存在
2)创建文件目录
 

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

@Service public class MediaUploadService {

private final static Logger LOGGER = LoggerFactory.getLogger(MediaUploadController.class);   

   @Autowired  

  MediaFileRepository mediaFileRepository; 

     //上传文件根目录

    @Value("${xc‐service‐manage‐media.upload‐location}")     String uploadPath;   

   /** 

    * 根据文件md5得到文件路径

      * 规则:  

   * 一级目录:md5的第一个字符  

   * 二级目录:md5的第二个字符 

    * 三级目录:md5 

    * 文件名:md5+文件扩展名   

  * @param fileMd5 文件md5值  

   * @param fileExt 文件扩展名 

    * @return 文件路径

     */    

private String getFilePath(String fileMd5,String fileExt){  

      String filePath = uploadPath+fileMd5.substring(0, 1) + "/" + fileMd5.substring(1, 2) +  "/" + fileMd5 + "/" + fileMd5 + "." + fileExt;  

      return filePath;

     }  

  //得到文件目录相对路径,路径中去掉根目录

    private String getFileFolderRelativePath(String fileMd5,String fileExt){   

     String filePath = fileMd5.substring(0, 1) + "/" + fileMd5.substring(1, 2) + "/" +  fileMd5 + "/";     

   return filePath;  

  }  

    //得到文件所在目录 

   private String getFileFolderPath(String fileMd5){  

      String fileFolderPath = uploadPath+ fileMd5.substring(0, 1) + "/" + fileMd5.substring(1,  2) + "/" + fileMd5 + "/" ;  

      return fileFolderPath; 

   }    

  //创建文件目录

    private boolean createFileFold(String fileMd5){ 

       //创建上传文件目录   

     String fileFolderPath = getFileFolderPath(fileMd5)

       File fileFolder = new File(fileFolderPath);  

      if (!fileFolder.exists()) {      

      //创建文件夹      

      boolean mkdirs = fileFolder.mkdirs();   

         return mkdirs;  

      }     

   return true

   } 

  

//文件上传注册     public ResponseResult register(String fileMd5, String fileName, String fileSize, String  mimetype, String fileExt) {   

     //检查文件是否上传     

   //1、得到文件的路径   

     String filePath = getFilePath(fileMd5, fileExt);   

     File file = new File(filePath);      

    //2、查询数据库文件是否存在    

    Optional<MediaFile> optional = mediaFileRepository.findById(fileMd5);   

     //文件存在直接返回  

      if(file.exists() && optional.isPresent()){   

         ExceptionCast.cast(MediaCode.UPLOAD_FILE_REGISTER_EXIST);  

      }         boolean fileFold = createFileFold(fileMd5);

        if(!fileFold){    

        //上传文件目录创建失败      

      ExceptionCast.cast(MediaCode.UPLOAD_FILE_REGISTER_CREATEFOLDER_FAIL);   

     }      

  return new ResponseResult(CommonCode.SUCCESS);  

  }       

    }

猜你喜欢

转载自blog.csdn.net/czbkzmj/article/details/91794622