Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用golang服务PDF_Pdf_Go - Fatal编程技术网

使用golang服务PDF

使用golang服务PDF,pdf,go,Pdf,Go,只是想知道你们能不能帮我写些代码 它可以提供图像,但不能提供pdf小册子。 提前谢谢 func main(){ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){ filename := "/var/www/filedipenser/brochure.pdf" streamPDFbytes, err := ioutil.ReadFile( filename )

只是想知道你们能不能帮我写些代码

它可以提供图像,但不能提供pdf小册子。 提前谢谢

func main(){
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
        filename    := "/var/www/filedipenser/brochure.pdf"

        streamPDFbytes, err := ioutil.ReadFile( filename )

        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }

        b := bytes.NewBuffer(streamPDFbytes)

        w.Header().Set("Content-type", "application/pdf")

        if _, err := b.WriteTo(w); err != nil {
            fmt.Fprintf(w, "%s", err)
        }

        w.Write([]byte("PDF Generated"))
    })

    err := http.ListenAndServe(":4111", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
        fmt.Println(err)
    }
}

代码效率有点低,但似乎正常工作。但是,某些PDF查看器可能对您添加到HTTP响应流末尾的无关输出敏感。删除
w.Write([]字节(“生成的PDF”)
,因为这将破坏输出。如果出于调试目的需要,可以将其更改为
fmt.Println

效率低下是因为您正在将整个PDF文件加载到内存中,然后发送到客户端。对于大文件,这将浪费内存。最好使用打开文件并直接从文件(an)流到响应(an)。比如:

    // Open file
    f, err := os.Open(filename)
    if err != nil {
        fmt.Println(err)
        w.WriteHeader(500)
        return
    }
    defer f.Close()

    //Set header
    w.Header().Set("Content-type", "application/pdf")

    //Stream to response
    if _, err := io.Copy(w, f); err != nil {
        fmt.Println(err)
        w.WriteHeader(500)
    }

显然,您希望更好地处理错误,这只是一个示例。但是,当您遇到错误时,向客户端提供HTTP错误响应是很重要的,这样它就知道请求失败了。

代码效率有点低,但似乎可以正常工作。但是,某些PDF查看器可能对您添加到HTTP响应流末尾的无关输出敏感。删除
w.Write([]字节(“生成的PDF”)
,因为这将破坏输出。如果出于调试目的需要,可以将其更改为
fmt.Println

效率低下是因为您正在将整个PDF文件加载到内存中,然后发送到客户端。对于大文件,这将浪费内存。最好使用打开文件并直接从文件(an)流到响应(an)。比如:

    // Open file
    f, err := os.Open(filename)
    if err != nil {
        fmt.Println(err)
        w.WriteHeader(500)
        return
    }
    defer f.Close()

    //Set header
    w.Header().Set("Content-type", "application/pdf")

    //Stream to response
    if _, err := io.Copy(w, f); err != nil {
        fmt.Println(err)
        w.WriteHeader(500)
    }

显然,您希望更好地处理错误,这只是一个示例。但是,当您遇到错误时,向客户端提供HTTP错误响应是很重要的,这样客户端就可以知道请求失败。

“它不工作”不是问题描述。你期待什么?你看到了什么?糟糕,我可以发誓我在这里上传了“它确实有用”状态的图片。是的。。。。。这真的不管用谢谢你提供的额外信息。但请不要包括文本的屏幕截图。复制并粘贴文本。“它不起作用”不是一个问题。你期待什么?你看到了什么?糟糕,我可以发誓我在这里上传了“它确实有用”状态的图片。是的。。。。。这真的不管用谢谢你提供的额外信息。但请不要包括文本的屏幕截图。而是复制并粘贴文本。