2016-12-04 2638 views
0

我想直接将多部分文件直接传送到AWSS3,而不是先将文件保存到磁盘。在我的golang REST API中接收* multipart.FileHeader类型的文件。现在我想将这个流传输到AWSS3,使用s3manager上传方法,它需要在body param中传递* bytes.Reader。我看到一个uploading file to AWSS3的例子,它以打开文件os.Open(“filepath”)从磁盘中获取* os.File类型的方式编写,将* bytes.Reader取出并传递给AWSS3。现在我正在努力将这个* multipart.FileHeader转换为* os.File。如何将* multipart.FileHeader文件类型转换为golang中的* os.File

+0

更新。做了一些实验。现在我需要将multipart.File转换为os.File –

+1

你想要一个'* os.File'还是一个真正的'io.Reader'?该文件仅适用于物理上位于磁盘上的文件,但您也说您不希望该文件位于磁盘上? – djd

+0

是的,我想要io.Reader完全是 –

回答

1

致电Openmultipart.FileHeader。它会返回一个multipart.File,它将提供一个读取器(将存储在内存中)的文件。

+0

若要添加更多'ParseMultipartForm',您可以控制何时将文件放入内存以及何时写入临时文件。从文档:它的文件部分的总共maxMemory字节被存储在内存中,剩余部分存储在磁盘上的临时文件中。 – djd

+1

如何避免写入磁盘(温度)并再次从磁盘读取? –

+0

@RaviTejaBathula如果你真的需要一个* os.File,你需要在某个地方写一个文件。但是,应该没有理由真正需要* os.File。 – JimB

相关问题