客户端发送文件,大小可能超过5G,发送到从服务器,然后从服务器再发送到主服务器。
从服务器会保存临时文件吗?我不希望这种情况发生,因为它会降低上传速度并浪费从服务器的内存。
有什么方法可以避免这种情况?在golang中传输大文件的最佳方式是什么?
客户端发送文件,大小可能超过5G,发送到从服务器,然后从服务器再发送到主服务器。
从服务器会保存临时文件吗?我不希望这种情况发生,因为它会降低上传速度并浪费从服务器的内存。
有什么方法可以避免这种情况?在golang中传输大文件的最佳方式是什么?
io.Copy()
函数来完成这个操作。由于Go具有出色的鸭子类型(duck typing)支持接口,因此它适用于TCP连接和HTTP请求/响应。io.Copy()
只是从给定的io.Reader
以小块读取数据并将其传输到传递给它的io.Writer
。因此,如果出现OOM错误,你的数据很可能会在写入器中累积,而你的任务是找出原因。过度无脑的缓冲是一个相当可能的原因。 - kostix