我想通过服务器暴露的rest端点将文件从客户端复制到服务器。我引用了stackoverflow中的各种问题和答案,但我看不清楚。
我只想要一个 golang 中的示例客户端和服务器代码,用于从客户端复制文件并将其保存在服务器上。
提前致谢。
最佳答案
方向:服务器到客户端
所以——双方都在围棋?好的,让我们从服务器端开始。看我的WebLoad.go
来 self 的文件 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客户端和服务器在同一个程序中。将它分成两个程序应该很容易。
关于rest - 使用 golang 通过 rest 端点将文件从客户端复制到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44173461/