gpt4 book ai didi

mongodb - Golang - MongoDB (mgo) 检索插入的文件(BSON 不是 GridFS)

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:35 25 4
gpt4 key购买 nike

我是 Golang 的新手。我正在尝试检索我插入的 PDF 文件对象。我没有使用 GridFS,因为我要存储的文件小于 16 MB。该对象已被插入(使用 load_file 函数),我在 MongoDB 可视化客户端中看到的对象 ID 是 ObjectId("554f98a400afc2dd3cbfb21b")。

不幸的是,在磁盘上创建的文件是 0 kb。请告知如何正确检索插入的 PDF 对象。

谢谢

package main

import (
"fmt"
"io/ioutil"

"gopkg.in/mgo.v2"
)

type Raw struct {
Kind byte
Data []byte
}

type RawDocElem struct {
Name string
Value Raw
}

func check(err error) {
if err != nil {
panic(err.Error())
}
}

func read_file_content(AFileName string) []byte {

file_contents, err := ioutil.ReadFile(AFileName)
check(err)
return file_contents
}

func save_fetched_file(AFileName RawDocElem) {
ioutil.WriteFile("fisier.pdf", AFileName.Value.Data, 0644)
fmt.Println("FileName:", AFileName.Name)
}

func load_file(AFileName string, ADatabaseName string, ACollection string) {
session, err := mgo.Dial("127.0.0.1,127.0.0.1")

if err != nil {
panic(err)
}
defer session.Close()

session.SetMode(mgo.Monotonic, true)

c := session.DB(ADatabaseName).C(ACollection)

the_obj_to_insert := Raw{Kind: 0x00, Data: read_file_content(AFileName)}

err = c.Database.C(ACollection).Insert(&the_obj_to_insert)
check(err)

}

func get_file(ADatabaseName string, ACollection string, The_ID string) RawDocElem {
session, err := mgo.Dial("127.0.0.1,127.0.0.1")

if err != nil {
panic(err)
}
defer session.Close()

session.SetMode(mgo.Monotonic, true)
c := session.DB(ADatabaseName).C(ACollection)

result := RawDocElem{}
err = c.FindId(The_ID).One(&result)
return result
}

func main() {
//f_name := "Shortcuts.pdf"
db_name := "teste"
the_collection := "ColectiaDeFisiere"
//load_file(f_name, db_name, the_collection)
fmt.Sprintf(`ObjectIdHex("%x")`, string("554f98a400afc2dd3cbfb21b"))
save_fetched_file(get_file(db_name, the_collection, fmt.Sprintf(`ObjectIdHex("%x")`, string("554f98a400afc2dd3cbfb21b"))))
}

最佳答案

我认为您构建对象 ID 的方法是错误的。此外,您忘记了在 FindId 调用之后测试错误。

我会尝试导入 bson 包,并使用类似以下内容构建对象 ID:

hexString := "554f98a400afc2dd3cbfb21b" //24 digits hexadecimal string
objid := bson.ObjectIdHex(hexString)
...
err = c.FindId(objid).One(&result)
if err == nil {
// Do something with result
...
} else {
// Error
...
}

关于mongodb - Golang - MongoDB (mgo) 检索插入的文件(BSON 不是 GridFS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com