Go 在浏览器中生成文档并重定向

Go 在浏览器中生成文档并重定向,go,Go,我有一个基于输入生成文件的二进制文件,即输入来自远程url,并输出到名为test.pdf的文件 我希望将其包装在Go包装器中,但我似乎无法生成pdf文件并将其输出到新的浏览器窗口,至少在Chi路由器Go设置的上下文中是这样,有人能告诉我从这里转到哪里吗?cmd var应该调用本地安装的二进制文件(在Go上下文之外工作)/usr/local/bin/generatedochttp://localhost:8000/ test.pdf然后将此pdf输出到新的浏览器窗口,我猜是某种重定向

我有一个基于输入生成文件的二进制文件,即输入来自远程url,并输出到名为test.pdf的文件

我希望将其包装在Go包装器中,但我似乎无法生成pdf文件并将其输出到新的浏览器窗口,至少在Chi路由器Go设置的上下文中是这样,有人能告诉我从这里转到哪里吗?cmd var应该调用本地安装的二进制文件(在Go上下文之外工作)
/usr/local/bin/generatedochttp://localhost:8000/ test.pdf
然后将此pdf输出到新的浏览器窗口,我猜是某种重定向

        func (config *Config) saft(w http.ResponseWriter, r *http.Request) {
            cmd := exec.Command("/usr/local/bin/generatedoc http://localhost:8000/ test.pdf")
            fmt.Println(cmd)
        }

浏览器窗口/选项卡管理超出HTTP协议的职责范围。在后端级别(HTTP协议),您可以将生成的
test.pdf
的内容推送到当前请求的响应体中,或者重定向到另一个请求以使用其响应体

在您的情况下,我认为重定向没有意义,您可以使用当前请求

func (config *Config) saft(w http.ResponseWriter, r *http.Request) {
    cmd := exec.Command("/usr/local/bin/generatedoc http://localhost:8000/ test.pdf")
    fmt.Println(cmd)

    f, err := os.Open("test.pdf")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }

    w.Header().Set("Content-Type", "application/pdf")
    _, err = io.Copy(w, f)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}
如果要在新选项卡中打开响应,则需要在客户端级别使用javascript或html对其进行配置。例如,如果使用链接:

<a href="/my.pdf" target="_blank">View PDF</a>


您知道如何将pdf内容推送到响应正文中吗?是的,这在上面的代码片段中。您需要
os.Open(“test.pdf”)
新创建的pdf文件,并
io.Copy(w,f)
将其内容复制到响应编写器
w