我阅读了一个 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.File
了GetFile
电话中的 。直接用那个。将其写入磁盘并再次读取是浪费时间。
在从数据库读取文件和发送到客户端之间也没有理由将文件保存到磁盘。
(您可能希望确保您的数据库经过优化以处理这样的大型 blob。对于大多数数据库来说,这不是通常的用例。)
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 所说,如果您需要从文件中读取,他的方式是最好的。问题是这个问题很模糊。
- 3 回答
- 0 关注
- 254 浏览
添加回答
举报
0/150
提交
取消