这听起来可能很奇怪,但是我正在开发一个允许用户下载文件(可以是zip)的终结点(REST)。 因此,我要通过第三方API获取文件,然后将其传递给最终用户。
我无法公开第三方API。 我对Golang和REST API也很陌生。我可以探讨这个概念,但是任何人都有任何想法,最好的方法是允许从REST端点下载文件,这实际上是来自第三方的。
我知道这是一种非常不好的提问方式,但是我不知道应该探索什么或阅读任何使我有这个想法的博客。
我不是在寻找代码,而是更多的想法。
答案 0 :(得分:1)
Golang具有io.Reader
的抽象概念,它封装了几乎所有可以二进制格式读取的内容。
通常,如果您有一个来自第三方API的文件,则至少有一种方法可以从该文件构建io.Reader
,无论它是HTTP请求,gRPC还是本地文件。
如果您有io.Reader
,则请求方肯定会提供io.Writer
,以允许您编写他们所请求的响应。在这之后,您所要做的就是桥接io.Reader
和io.Writer
,使用io.Copy
或io.CopyN
快速将文件从第三方API复制到请求方例如。
答案 1 :(得分:0)
在@Seaskyways上面解释的内容中添加代码段。
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 :(得分:0)
你可以简单地在 gin.Context.FileAttachment(path,filename) 的帮助下完成