如何通过使用beego从数据库中读取内容来制作pdf文件?

我阅读了一个 pdf 文件,然后将其原始内容存储到数据库中。现在我想从数据库中读取该内容并创建一个 pdf 以便用户可以下载它。


为此,我阅读了内容并将其写入扩展名为 .pdf 的文件。但结果是一个空的pdf文件。


我这样做是因为我想避免将文件保存在磁盘中。


我正在使用 beego 框架。


任何建议/帮助?


这是我在做什么


从pdf文件读取并将其写入数据库


_,header,_:=c.GetFile("attachment[]")

attachment:=header.Filename

c.SaveToFile("attachment[]","/tmp/"+attachment)

content,_:= ioutil.ReadFile("/tmp/"+attachment)

s := string(content)

然后将此's'写入数据库


从数据库读取并写入pdf文件


err := o.Raw("SELECT attachment FROM table_name WHERE id=?",id).QueryRow(&att)

if err == nil {

     fmt.Println(att)

}

var data []byte

data = []byte(att)

ioutil.WriteFile("/tmp/hello.pdf",data, 0666)


慕田峪4524236
浏览 255回答 3
3回答

慕森卡

你忽略multipart.File了GetFile电话中的 。直接用那个。将其写入磁盘并再次读取是浪费时间。在从数据库读取文件和发送到客户端之间也没有理由将文件保存到磁盘。(您可能希望确保您的数据库经过优化以处理这样的大型 blob。对于大多数数据库来说,这不是通常的用例。)

Helenr

我在 MongoDB 文档中遇到了同样的 pdf 问题。它存储为 Base64 加密的字符串值。我的步骤是:找到记录。解码字符串:从 pdfBytes 创建一个 *Buffer将其直接写入 http.ResponseWritter:b := bytes.NewBuffer(pdfBytes)                         // Step 2pdfBytes,err := b64.StdEncoding.DecodeString(doc.Image) // Step 3if _, err := b.WriteTo(w); err != nil {                 // Step 4   fmt.Fprintf(w, "%s", err) // Handle the error}这很好用,我使用它处理 40 多万个文档。但是,如果有更好的方法,我总是很想学习。正如@JimB 所说,如果您需要从文件中读取,他的方式是最好的。问题是这个问题很模糊。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go