为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕田峪4524236 2021-09-10 17:28:23
我阅读了一个 pdf 文件,然后将其原始内容存储到数据库中。现在我想从数据库中读取该内容并创建一个 pdf 以便用户可以下载它。为此,我阅读了内容并将其写入扩展名为 .pdf 的文件。但结果是一个空的pdf文件。我这样做是因为我想避免将文件保存在磁盘中。我正在使用 beego 框架。任何建议/帮助?这是我在做什么从pdf文件读取并将其写入数据库_,header,_:=c.GetFile("attachment[]")attachment:=header.Filenamec.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 []bytedata = []byte(att)ioutil.WriteFile("/tmp/hello.pdf",data, 0666)
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

你忽略multipart.FileGetFile电话中的 。直接用那个。将其写入磁盘并再次读取是浪费时间。

在从数据库读取文件和发送到客户端之间也没有理由将文件保存到磁盘。

(您可能希望确保您的数据库经过优化以处理这样的大型 blob。对于大多数数据库来说,这不是通常的用例。)


查看完整回答
反对 回复 2021-09-10
?
Helenr

TA贡献1780条经验 获得超3个赞

我在 MongoDB 文档中遇到了同样的 pdf 问题。它存储为 Base64 加密的字符串值。我的步骤是:


找到记录。

解码字符串:

从 pdfBytes 创建一个 *Buffer

将其直接写入 http.ResponseWritter:


b := bytes.NewBuffer(pdfBytes)                         // Step 2

pdfBytes,err := b64.StdEncoding.DecodeString(doc.Image) // Step 3

if _, err := b.WriteTo(w); err != nil {                 // Step 4

   fmt.Fprintf(w, "%s", err) // Handle the error

}


这很好用,我使用它处理 40 多万个文档。但是,如果有更好的方法,我总是很想学习。正如@JimB 所说,如果您需要从文件中读取,他的方式是最好的。问题是这个问题很模糊。


查看完整回答
反对 回复 2021-09-10
  • 3 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信