Я новичок в Голанге. Я пытаюсь получить PDF-файл, который я вставил. Я не использую GridFS, так как файлы, которые я буду хранить, составляют менее 16 МБ. Объект был вставлен (с использованием функции load_file) и идентификатором объекта, который я вижу с визуальным клиентом MongoDB, является ObjectId («554f98a400afc2dd3cbfb21b»).Golang - MongoDB (mgo) извлекает вставленный файл (BSON не GridFS)
К сожалению, файл создан на диске объемом 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"))))
}
Я изменил два элемента: а. objectID: = bson.ObjectIdHex (The_ID) плюс err = c.FindId (objectID) .One (& result) и b. возвращенный объект имеет тип Raw, а не RawDocElem. После этого он правильно сохранил pdf. – Tudor