允许使用第三方API从Golang的REST端点下载文件

时间:2019-02-21 09:41:48

标签: rest api go download zip

这听起来可能很奇怪,但是我正在开发一个允许用户下载文件(可以是zip)的终结点(REST)。 因此,我要通过第三方API获取文件,然后将其传递给最终用户。

我无法公开第三方API。 我对Golang和REST API也很陌生。我可以探讨这个概念,但是任何人都有任何想法,最好的方法是允许从REST端点下载文件,这实际上是来自第三方的。

我知道这是一种非常不好的提问方式,但是我不知道应该探索什么或阅读任何使我有这个想法的博客。

我不是在寻找代码,而是更多的想法。

3 个答案:

答案 0 :(得分:1)

Golang具有io.Reader的抽象概念,它封装了几乎所有可以二进制格式读取的内容。
通常,如果您有一个来自第三方API的文件,则至少有一种方法可以从该文件构建io.Reader,无论它是HTTP请求,gRPC还是本地文件。

如果您有io.Reader,则请求方肯定会提供io.Writer,以允许您编写他们所请求的响应。在这之后,您所要做的就是桥接io.Readerio.Writer,使用io.Copyio.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) 的帮助下完成

go to this respo.