我想通过服务器公开的其余端点将文件从客户端复制到服务器。我在stackoverflow中提到了各种问题和答案,但我无法清楚地了解它。
我只想在golang中使用示例客户端和服务器代码从客户端复制文件并将其保存在服务器上。
提前致谢。
答案 0 :(得分:0)
方向:服务器到客户端
那么 - 双方都在Go?好的,让我们从服务器端开始。请参阅我的WebLoad.go
服务器中的CSVStorageServer
文件:(Link to Github)
在第17行,我定义了Web服务器的处理程序。此方法将按需构建zip文件并将其发送到浏览器。关于你的问题的重要部分是第77行到82.这里,我设置了客户端的标题,例如内容长度和类型。第82行将整个数据发送到客户端。它将字节从按需zip文件复制到电线。
在客户端,您可以触发,例如GET
请求并存储结果。这是一个例子:https://golang.org/pkg/net/http/#example_Get
使用http.Get(...
,您会触发GET
请求。使用ioutil.ReadAll(res.Body)
,您可以从服务器读取所有字节并将其存储到变量中。之后,您可以将字节写入磁盘或在内存中处理它。
我希望,这个答案会帮助你。
最好的问候,托尔斯滕
编辑#1:
关于REST端点,参见服务器定义(link to Github)。第16行定义了此处理程序的REST端点。在这种情况下,它可以/load
获得。你可以在这里使用任何类似REST的路径,例如/open/file/USERID/send
等等。
方向:客户端到服务器
为了将文件从客户端复制到服务器端,需要进行类似的操作。在客户端,POST
请求为multipart/form-data
。这是一个很好的例子:Link to a blog post。此示例还考虑了服务器部分。相关的客户端部分是函数func postFile(filename string, targetUrl string) error { ... }
。
对于服务器部分,这里有一个自己的例子:Link to Github。此示例从客户端接收文件并将其写入MongoDB数据库。相关部分是:
第39行从客户端读取文件:file, fileHeader, fileError := request.FormFile("file")
结果是此上传文件的句柄。
第60行将源(浏览器或Go客户端)中的所有字节复制到目标(此处为MongoDB):_, errCopy := io.Copy(newFile, file)
。
编辑#2:
以下是一个完整的工作示例:https://github.com/SommerEngineering/Example010其中客户端和服务器位于同一程序中。将它分成两个程序应该很容易。