The new Java project studies online notes -day13 (xiv)

 

6.3.5.5 merging block 
merging block method defined in Service block, functions as follows:
1) The combined block file

[AppleScript]  plain text view  Copy the code

?

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

//块文件上传 public ResponseResult uploadchunk(MultipartFile file, String fileMd5, String chunk) {  

  if(file == null){      

  ExceptionCast.cast(MediaCode.UPLOAD_FILE_REGISTER_ISNULL)

   }  

  //创建块文件目录

    boolean fileFold = createChunkFileFolder(fileMd5);  

  //块文件  

  File chunkfile = new File(getChunkFileFolderPath(fileMd5) + chunk);  

  //上传的块文件

     InputStream inputStream= null; 

   FileOutputStream outputStream = null;   

 try {      

  inputStream = file.getInputStream();  

      outputStream = new FileOutputStream(chunkfile)

       IOUtils.copy(inputStream,outputStream);

    } catch (Exception e) {     

   e.printStackTrace();   

     LOGGER.error("upload chunk file fail:{}",e.getMessage());  

      ExceptionCast.cast(MediaCode.CHUNK_FILE_UPLOAD_FAIL)

   }finally {     

  try {       

     inputStream.close();   

     } catch (IOException e) {    

        e.printStackTrace();     

   }     

   try {  

          outputStream.close();  

      } catch (IOException e) { 

           e.printStackTrace();  

      }   

   }   

 return new ResponseResult(CommonCode.SUCCESS); }  

  //创建块文件目录

    private boolean createChunkFileFolder(String fileMd5){    

    //创建上传文件目录    

    String chunkFileFolderPath = getChunkFileFolderPath(fileMd5)

       File chunkFileFolder = new File(chunkFileFolderPath)

       if (!chunkFileFolder.exists()) {     

       //创建文件夹   

         boolean mkdirs = chunkFileFolder.mkdirs();   

         return mkdirs;   

     }      

  return true;  

  }


6.3.5.5 combined block 
incorporated in the block defined in the block Service method, the following functions:
1) The block merging document

2) the md5 checksum is correct 3) information to write to the file Mongodb
// Merge block file
 

[AppleScript]  plain text view  Copy the code

?

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

public ResponseResult mergechunks(String fileMd5, String fileName, Long fileSize, String  mimetype, String fileExt) { 

   //获取块文件的路径  

  String chunkfileFolderPath = getChunkFileFolderPath(fileMd5)

   File chunkfileFolder = new File(chunkfileFolderPath);  

  if(!chunkfileFolder.exists()){  

      chunkfileFolder.mkdirs();  

  } 

   //合并文件路径 

   File mergeFile = new File(getFilePath(fileMd5,fileExt));  

  //创建合并文件   

 //合并文件存在先删除再创建 

   if(mergeFile.exists()){      

  mergeFile.delete()

   }  

  boolean newFile = false

  try { 

       newFile = mergeFile.createNewFile();

    } catch (IOException e) {   

     e.printStackTrace();  

      LOGGER.error("mergechunks..create mergeFile fail:{}",e.getMessage());

    }     if(!newFile){     

   ExceptionCast.cast(MediaCode.MERGE_FILE_CREATEFAIL)

   }   

 //获取块文件,此列表是已经排好序的列表

    List<File> chunkFiles = getChunkFiles(chunkfileFolder);

    //合并文件  

  mergeFile = mergeFile(mergeFile, chunkFiles)

   if(mergeFile == null){   

     ExceptionCast.cast(MediaCode.MERGE_FILE_FAIL)

   }  

  //校验文件

    boolean checkResult = this.checkFileMd5(mergeFile, fileMd5);  

  if(!checkResult){     

   ExceptionCast.cast(MediaCode.MERGE_FILE_CHECKFAIL)

   }    

//将文件信息保存到数据库

    MediaFile mediaFile = new MediaFile();  

  mediaFile.setFileId(fileMd5);  

  mediaFile.setFileName(fileMd5+"."+fileExt);   

 mediaFile.setFileOriginalName(fileName);

    //文件路径保存相对路径

    mediaFile.setFilePath(getFileFolderRelativePath(fileMd5,fileExt));

    mediaFile.setFileSize(fileSize)

   mediaFile.setUploadTime(new Date());  

  mediaFile.setMimeType(mimetype)

   mediaFile.setFileType(fileExt);

 

[AppleScript]  plain text view  Copy the code

?

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

63

64

65

66

67

68

69

70

71

72

73

//状态为上传成功 

  mediaFile.setFileStatus("301002")

  MediaFile save = mediaFileDao.save(mediaFile)

    return new ResponseResult(CommonCode.SUCCESS); }  //校验文件的md5值  

 private boolean checkFileMd5(File mergeFile,String md5){   

    if(mergeFile == null || StringUtils.isEmpty(md5)){  

         return false;   

    }  

     //进行md5校验  

     FileInputStream mergeFileInputstream = null;   

    try {     

      mergeFileInputstream = new FileInputStream(mergeFile);     

      //得到文件的md5        

   String  mergeFileMd5 = DigestUtils.md5Hex(mergeFileInputstream);       

    //比较md5       

    if(md5.equalsIgnoreCase(mergeFileMd5)){         

     return true;      

     }   

    } catch (Exception e) { 

          e.printStackTrace();     

      LOGGER.error("checkFileMd5 error,file is:{},md5 is: {}",mergeFile.getAbsoluteFile(),md5);     

  }finally{        

   try {      

         mergeFileInputstream.close();      

     } catch (IOException e) {    

           e.printStackTrace();    

       }    

   }     

    return false

    }   

//获取所有块文件 

  private List<File> getChunkFiles(File chunkfileFolder){  

     //获取路径下的所有块文件  

     File[] chunkFiles = chunkfileFolder.listFiles();     

  //将文件数组转成list,并排序  

     List<File> chunkFileList = new ArrayList<File>();   

    chunkFileList.addAll(Arrays.asList(chunkFiles));  

     //排序    

   Collections.sort(chunkFileList, new Comparator<File>() { 

          @Override        

   public int compare(File o1, File o2) {          

     if(Integer.parseInt(o1.getName())>Integer.parseInt(o2.getName())){          

         return 1;      

         }

               return 1;

           }         });    

   return chunkFileList; 

  }     //合并文件

    private File mergeFile(File mergeFile,List<File> chunkFiles){  

     try {         

  //创建写文件对象          

 RandomAccessFile raf_write = new RandomAccessFile(mergeFile,"rw");     

      //遍历分块文件开始合并     

      //读取文件缓冲区     

      byte[] b = new byte[1024];    

       for(File chunkFile:chunkFiles){   

            RandomAccessFile raf_read = new RandomAccessFile(chunkFile,"r");       

        int len = 1;          

     //读取分块文件        

       while((len = raf_read.read(b))!=1){   

                //向合并文件中写数据         

          raf_write.write(b,0,len);    

           }         

      raf_read.close();   

        }       

    raf_write.close();  

     } catch (Exception e) {    

       e.printStackTrace();   

        LOGGER.error("merge file error:{}",e.getMessage());   

        return null;     

  }      

 return mergeFile;  

 }


6.3.5.6 Controller 

[AppleScript]  plain text view  Copy the code

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

@RestController @RequestMapping("/media/upload") public class MediaUploadController implements MediaUploadControllerApi {  

    @Autowired   

 MediaUploadService mediaUploadService; 

     @Override   

  @PostMapping("/register")  

  public ResponseResult register(@RequestParam("fileMd5") String fileMd5,  @RequestParam("fileName") String fileName, @RequestParam("fileSize") Long fileSize,  @RequestParam("mimetype") String mimetype, @RequestParam("fileExt") String fileExt) {         return mediaUploadService.register(fileMd5,fileName,fileSize,mimetype,fileExt);     }  

    @Override  

  @PostMapping("/checkchunk")  

  public CheckChunkResult checkchunk(@RequestParam("fileMd5") String fileMd5,

@RequestParam("chunk") Integer chunk, @RequestParam("chunkSize") Integer chunkSize) {         return mediaUploadService.checkchunk(fileMd5,chunk,chunkSize);  

  }    

  @Override  

   @PostMapping("/uploadchunk")  

  public ResponseResult uploadchunk(@RequestParam("file") MultipartFile file,  @RequestParam("fileMd5") String fileMd5, @RequestParam("chunk") Integer chunk) {   

     return mediaUploadService.uploadchunk(file,fileMd5,chunk)

   }  

    @Override 

   @PostMapping("/mergechunks") 

   public ResponseResult mergechunks(@RequestParam("fileMd5") String fileMd5,  @RequestParam("fileName") String fileName, @RequestParam("fileSize") Long fileSize,  @RequestParam("mimetype") String mimetype, @RequestParam("fileExt") String fileExt) {         return mediaUploadService.mergechunks(fileMd5,fileName,fileSize,mimetype,fileExt);   

 } }

Guess you like

Origin blog.csdn.net/czbkzmj/article/details/91794923