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

我是 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"))))

}


隔江千里
浏览 205回答 1
1回答

呼啦一阵风

我认为您构建对象 ID 的方式是错误的。此外,您忘记在 FindId 调用之后测试错误。我会尝试导入 bson 包,并使用以下内容构建对象 ID:hexString := "554f98a400afc2dd3cbfb21b" //24 digits hexadecimal stringobjid := bson.ObjectIdHex(hexString)...err = c.FindId(objid).One(&result)if err == nil {   // Do something with result   ...} else {   // Error   ...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go