我正在编写一个长期运行的任务,该任务多次从mongodb(使用mgo)获取。然后使用此模块将其写入xlsx文件。然后使用os.Open重新读取,然后将其存储到我的ftp服务器中。
os.Open
Stor函数会消耗大量内存,因此,我认为应该有一种方法不保存文件,而是将数据从xlsx.Write直接传递到ftp.Store。(如果我可以同时进行流传输,那将是完美的,因为在将它们发送到Stor函数之前,不必将所有文档都保留在服务器的内存中)
Stor
这些是功能的原型
func (f *File) Write(writer io.Writer) (err error) xlsl
func (f *File) Write(writer io.Writer) (err error)
func (ftp *FTP) Stor(path string, r io.Reader) (err error) ftp
func (ftp *FTP) Stor(path string, r io.Reader) (err error)
您要使用io.Pipe。你可以做:
reader, writer := io.Pipe() errChan := make(chan error) go func() { errChan <- myFTP.Stor(path, reader) }() err := myXLS.Write(writer) // handle err err = <-errChan // handle err
您可能想要writer.CloseWithError(err)if xlsx.Write返回错误而不关闭编写器。
writer.CloseWithError(err)
xlsx.Write