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

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

[mw_shl_code=applescript,true]type:"POST",
url:"/api/media/upload/mergechunks", data:{ 
  fileMd5:this.fileMd5,  
fileName: file.name, 
  fileSize:file.size,  
mimetype:file.type, 
  fileExt:file.ext }[/mw_shl_code]

6.3.3.6 页面效果
Java的新项目学成在线笔记-day13(十二)
6.3.4 Api接口
定义文件上传的Api接口,此接收是前端WebUploader调用服务端的接口。 编写此接口需要参数前端WebUploader应用代码。


[mw_shl_code=applescript,true]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);   
   [/mw_shl_code]

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


[mw_shl_code=applescript,true]xc‐service‐manage‐media:
   upload‐location: F:/develop/video/[/mw_shl_code]

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


[mw_shl_code=applescript,true]public interface MediaFileRepository extends MongoRepository<MediaFile,String> {  
} [/mw_shl_code]

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


[mw_shl_code=applescript,true]@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);   
  }        
    }[/mw_shl_code]

转载于:https://blog.51cto.com/13517854/2409030

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值