使用golang服务PDF
只是想知道你们能不能帮我写些代码 它可以提供图像,但不能提供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 )
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错误响应是很重要的,这样客户端就可以知道请求失败。“它不工作”不是问题描述。你期待什么?你看到了什么?糟糕,我可以发誓我在这里上传了“它确实有用”状态的图片。是的。。。。。这真的不管用谢谢你提供的额外信息。但请不要包括文本的屏幕截图。复制并粘贴文本。“它不起作用”不是一个问题。你期待什么?你看到了什么?糟糕,我可以发誓我在这里上传了“它确实有用”状态的图片。是的。。。。。这真的不管用谢谢你提供的额外信息。但请不要包括文本的屏幕截图。而是复制并粘贴文本。