-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ます。それを直接使用してください。ディスクに書き込んで再度読み取るのは時間の無駄です。

また、DB からファイルを読み取ってからクライアントに送信するまでの間、ファイルをディスクに保存する必要もありません。

(DB がこのような大きな 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 }

これは問題なく動作します。私はそれを使用して 4000 万以上のドキュメントを処理しています。しかし、もっと良い方法があれば、常に学びたいと思っています。@JimBが言ったように、ファイルから読み取る必要がある場合は、彼の方法が最適です。問題は、質問が非常に曖昧だったことです。

于 2019-06-15T15:20:39.010 に答える