淘先锋技术网

首页 1 2 3 4 5 6 7
6.2.2 创建媒资服务工程 
媒资管理的相关功能单独在媒资服务中开发,下边创建媒资服务工程(xc-service-manage-media)。 媒资服务的配置与cms类似,导入 “资料”--》xc-service-manage-media工程,工程结构如下:
 
6.3上传文件 
6.3.1 断点续传解决方案 
通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大 小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了,电断了没 有上传完成,需要客户重新上传,这是致命的,所以对于大文件上传的要求最基本的是断点续传。
什么是断点续传:

引用百度百科:断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个 部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传 下载未完成的部分,而没有必要从头开始上传下载,断点续传可以提高节省操作时间,提高用户体验性。
如下图:

 
上传流程如下:
1、上传前先把文件分成块 2、一块一块的上传,上传中断后重新上传,已上传的分块则不用再上传
3、各分块上传完成最后合并文件  
文件下载则同理。
  6.3.2 文件分块与合并 
为了更好的理解文件分块上传的原理,下边用java代码测试文件的分块与合并。 6.3.2.1文件分块 
文件分块的流程如下:
1、获取源文件长度
2、根据设定的分块文件的大小计算出块数 3、从源文件读数据依次向每一个块文件写数据。
 

[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

//测试文件分块方法  

 @Test

    public void testChunk() throws IOException {   

    File sourceFile = new File("F:/develop/ffmpeg/lucene.mp4"); // 

     File sourceFile = new File("d:/logo.png");  

     String chunkPath = "F:/develop/ffmpeg/chunk/";   

    File chunkFolder = new File(chunkPath);   

    if(!chunkFolder.exists()){

           chunkFolder.mkdirs();

}    

   //分块大小

       long chunkSize = 1024*1024*1;  

     //分块数量     

  long chunkNum = (long) Math.ceil(sourceFile.length() * 1.0 / chunkSize );  

     if(chunkNum<=0){      

     chunkNum = 1;   

    }    

   //缓冲区大小 

      byte[] b = new byte[1024];  

     //使用RandomAccessFile访问文件 

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

     //分块       

for(int i=0;i<chunkNum;i++){  

         //创建分块文件     

      File file = new File(chunkPath+i);  

         boolean newFile = file.createNewFile()

          if(newFile){   

            //向分块文件中写数据   

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

     int len = 1;          

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

            raf_write.write(b,0,len);    

               if(file.length()>chunkSize){        

               break;        

           }     

          }     

          raf_write.close();   

        }     

    }      

 raf_read.close();  

   }