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

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

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

Go
隔江千里 2021-10-04 17:10:58
我是 Golang 的新手。我正在尝试检索我插入的 PDF 文件对象。我没有使用 GridFS,因为我要存储的文件小于 16 MB。对象已插入(使用 load_file 函数),我在 MongoDB 可视化客户端中看到的对象 ID 是 ObjectId("554f98a400afc2dd3cbfb21b")。不幸的是,在磁盘上创建的文件是 0 kb。请告知如何正确检索插入的 PDF 对象。谢谢package mainimport (    "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"))))}
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我认为您构建对象 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

   ...

}


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

添加回答

举报

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