gpt4 book ai didi

pdf - 使用 golang 提供 pdf

转载 作者:IT王子 更新时间:2023-10-29 01:50:06 24 4
gpt4 key购买 nike

只是想知道你们是否可以帮助编写一些代码。

它可以提供图片,但不能提供 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)
}
}

enter image description here

最佳答案

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

效率低下是因为您将整个 PDF 文件加载到内存中,然后再发送给客户端。对于大文件,这会浪费内存。您最好打开文件并使用 io.Reader 直接从文件(io.Writer)流式传输到响应(io.Copy) .像这样的东西:

    // 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 - 使用 golang 提供 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45302083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com