只是想知道你们是否可以提供一些代码帮助.
它可以提供图像,但不是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)
}
}
Run Code Online (Sandbox Code Playgroud)
代码效率有点但似乎有效.但是,某些PDF查看器可能对您添加到HTTP响应流末尾的无关输出很敏感.删除,w.Write([]byte("PDF Generated"))因为这将破坏输出.fmt.Println如果您想进行调试,可以将其更改为a .
效率低下的原因是您将整个PDF文件加载到内存中然后发送到客户端.对于大文件,这将浪费内存.您最好使用io.Copy打开文件并直接从文件(io.Reader)流式传输到响应(io.Writer).就像是:
// 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)
}
Run Code Online (Sandbox Code Playgroud)
你显然想要更好地处理错误,这只是一个例子.但是,重要的是当您遇到错误时会向客户端提供HTTP错误响应,以便它知道请求失败.
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |