【问题标题】:Allow to download file from my REST endpoint in Golang using 3rd party API允许使用 3rd 方 API 从我在 Golang 中的 REST 端点下载文件
【发布时间】:2019-02-21 09:41:47
【问题描述】:
这听起来可能很奇怪,但我正在开发一个端点(REST),允许用户下载文件(可能是 zip)。
所以我正在使用第 3 方 API 来获取文件,然后我必须将其传递给最终用户。
我无法公开第 3 方 API。
我对 Golang 和 REST API 也很陌生。我可以探索这个概念,但任何人都有任何想法,允许从实际上来自第三方的 REST 端点下载文件的最佳方式是什么。
我知道这是一种非常糟糕的提问方式,但我不知道我应该探索什么或阅读任何给我这个想法的博客。
我不是在寻找代码,而是更多的想法。
【问题讨论】:
标签:
rest
api
go
download
zip
【解决方案1】:
在@Seaskyways 上面解释的内容中添加代码 sn-p。
return middleware.ResponderFunc(func(w http.ResponseWriter, r runtime.Producer) {
fn := filepath.Base(filePath)
w.Header().Set("Content-Type", "application/octet-stream")
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", fn))
io.Copy(w, file)
defer os.Remove(filePath)
file.Close()
})
希望对您有所帮助。
【解决方案2】:
Golang 具有io.Reader 的抽象,它封装了几乎所有可以以二进制格式读取的内容。
通常,如果您有一个来自 3rd 方 API 的文件,您至少有一种方法可以从该文件构建 io.Reader,无论是 HTTP 请求、gRPC 还是本地文件。
如果您有io.Reader,那么请求方肯定会提供io.Writer 以允许您编写他们请求的响应。在此之后,您所要做的就是桥接io.Reader 和io.Writer,以使用io.Copy 或io.CopyN 将文件从第3 方API 即时复制到请求方。