读取本地超大文件并以字节流类型发送

最近的项目中需要把本地的超大文件(视频,音频)读取出来转换成为[]byte并post到服务器,有什么好的方式可以进行读取并传输呢,大文件要全部读出来肯定会消耗大量内存?

已邀请:

h12 - https://h12.io

赞同来自: dncmn

看来我只说参考 io.Pipe, io.Copy 还是不容易理解。我说详细些:一句话流是这类问题的标准解法。

  1. 首先“读取出来转换成为[]byte”就不对了,既然是大文件,全读到[]byte就已经进入内存了,浪费已经造成。

  2. 所以解决这类问题的关键是用流。流处理只需要缓冲区大小的内存就能处理任意大小的io输入输出(文件或网络IO都包括),发送端读入文件流,复制到网络流。接收端读入网络流,再复制回文件流。

  3. 发送:os.File是io.Reader,而http.Post的最后一个参数也是io.Reader,io.Copy不能直接使用,所以适配两者的关键是用 io.Pipe。

  4. 接收:Request.Body是io.Reader,os.File也是io.Writer,这时候直接io.Copy就可以。

h12 - https://h12.io

赞同来自:

参考 io.Pipe, io.Copy

dncmn - 90it男

赞同来自:

能不能文件分割一下,将大文件分割成等量小文件。到时候再组装一下?

要回复问题请先登录注册