zoukankan      html  css  js  c++  java
  • TSINGSEE青犀视频云边端架构视频直播点播平台EasyDSS内Go语言生成归档文件功能介绍

    上一篇我们讲了在EasyDSS定制项目中,把点播文件打包的各种格式,由于用户对产品开发有不同的需求,因此TSINGSEE青犀视频研发团也在探寻更多的定制方式。

    近期我们又接到了新的需求,需要把多个文件归档成一个文件提交给用户下载。将一个文件编辑成一个 tar 文件的代码如下:

    // tar 单个文件
    func tarFile(filesource string, sfileInfo os.FileInfo, tarwriter *tar.Writer) error { 
       sfile, err := os.Open(filesource)
       if err != nil {
          fmt.Println(err)
          return err
       }
       defer sfile.Close()
       header, err := tar.FileInfoHeader(sfileInfo, "")
       if err != nil {
          fmt.Println(err)
          return err
       }
       header.Name = sfileInfo.Name()
       
       err = tarwriter.WriteHeader(header)
       if err != nil {
          fmt.Println(err)
          return err
       }
       if _, err = io.Copy(tarwriter, sfile); err != nil {
          fmt.Println(err)
          return err
       }
       return nil
    }
    

    tarFile 函数为将单个文件封装成tar包,主要使用 tar.Writer 进行tar包的封装。调用 tarFile 函数,将多个文件封装成 tar 包的代码如下:

    // 将 filePaths 中的所有路径
    // targetTarPath 以 tar 为结尾,会自动创建
    // filePaths 为文件列表
    func TarFiles(targetTarPath string, filePaths *[]string) error {
       // 创建 tar 文件
       tarfile, err := os.Create(targetTarPath)
       if err != nil {
          // if file is exist then delete file
          if err == os.ErrExist {
             os.Remove(targetTarPath)
          }
          return err
       }
       defer tarfile.Close()
       tarWriter := tar.NewWriter(tarfile)
    
       // 遍历文件列表,归档
       for _, file := range *filePaths {
          sfileInfo, err := os.Stat(file)
          if err != nil {
             return err
          }
          // 如果发现不是文件,则直接返回错误
          if sfileInfo.IsDir() {
             os.Remove(targetTarPath)
             return errors.New("仅支持文件打包。")
          }
    
          err = tarFile(file, sfileInfo, tarWriter)
          if err != nil {
             os.Remove(targetTarPath)
             return err
          }
       }
    
       return nil
    }
    

    TarFiles 函数为提供给外部包调用的函数。首先创建对应的 tar 包,然后循环将对应的文件添加到 tar 包中。
    对应的测试函数如下:

    func TestTarFiles(t *testing.T) {
       files := make([]string, 0)
       files = append(files, `D:	estdatasvideosix0413-1.mp4`)
       files = append(files, `D:	estdatasvideosix0413-2.mp4`)
       TarFiles(`D:	estdatasvideo	est.tar`, &files)
    }
    

    测试函数的作用为将 six0413-1.mp4 和 six0413-2.mp4 打包到 test.tar 中。

    关于EasyDSS的直播点播功能,大家也可以自行下载多多研究和测试,TSINGSEE青犀视频云边端架构全线产品均提供了试用版本,可以联系我们获取测试账号。更多视频相关解决方案,欢迎咨询了解。

  • 相关阅读:
    MST(prim)+树形dp-hdu-4756-Install Air Conditioning
    Java常用排序算法+程序员必须掌握的8大排序算法
    高可用可伸缩架构实用经验谈
    MYSQL索引失效的各种情形总结
    MySQL使用索引的场景及真正利用索引的SQL类型
    MySQL数据库索引的4大类型以及相关的索引创建
    JVM调优浅谈
    dubbo作为消费者注册过程分析--????
    webservice 协议
    你应该知道的 RPC 原理
  • 原文地址:https://www.cnblogs.com/easydss/p/14001274.html
Copyright © 2011-2022 走看看