-4

我阅读了一个 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)
4

3 回答 3

1

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

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

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

于 2015-01-09T19:29:55.580 回答
0

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

  1. 找到记录。
  2. 解码字符串:
  3. 从 pdfBytes 创建一个 *Buffer
  4. 直接写到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 所说,如果您需要从文件中读取,他的方式是最好的。问题是问题非常模糊。

于 2019-06-15T15:20:39.010 回答
-1

什么时候使用 github.com/jung-kurt/gofpdf 库:

func (c *MyController) PrintPDF() {         
    pdf := gofpdf.New("", "", "", "")
    pdf.AddPage()
    pdf.Text(10, 20, "Circles")
    var b bytes.Buffer
    w := bufio.NewWriter(&b)
    pdf.Output(w)
    pdf.Close()
    w.Flush()
    c.Ctx.Output.ContentType("application/pdf")
    c.Ctx.Output.Body(b.bytes())
}
于 2015-10-22T12:12:22.430 回答