使用GoLang mgo将PDF保存在MongoDb中

使用GoLang mgo将PDF保存在MongoDb中,第1张

使用GoLang mgo将PDF保存在MongoDb中

file
通过返回
Request.FormFile()
类型为
multipart.File
是:

type File interface {    io.Reader    io.ReaderAt    io.Seeker    io.Closer}

它实现了

io.Reader
,因此您可以简单地读取其内容,例如
ioutil.ReadAll()

data, err := io.ReadAll(file)// Handle error

然后:

dbSchoolPojo.Pdfdata = data

但是将大文件存储为文档的一部分并不是最佳/有效的方法。相反,看看在MongoDB的GridFS的也由支持

mgo
Database.GridFS()

这是将文件存储在MongoDB
GridFS中的方法(示例取自

GridFS.Create()
):

func check(err error) {    if err != nil {        panic(err.String())    }}file, err := db.GridFS("fs").Create("myfile.txt")check(err)n, err := file.Write([]byte("Hello world!"))check(err)err = file.Close()check(err)fmt.Printf("%d bytes writtenn", n)

使用

GridFS
,您还可以保存文件,而无需先将其所有内容读取到内存中(如果将文件内容“流式传输”到
mgo.GridFile
实现中)
io.Writer
。致电
io.Copy()

// ...file, handler, err := r.FormFile("pdfFile")// ...mongoFile, err := db.GridFS("fs").Create("somepdf.pdf")check(err)// Now stream from HTTP request into the mongo file:written, err := io.Copy(mongoFile, file)// Handle errerr = mongoFile.Close()check(err)

编辑:更新回答您的更新

提供PDF时,您以错误的方式查询文档:

err := coll.Find(bson.M{"_id": bson.ObjectIdHex(incomingId)}).    Select(bson.M{"pdf": 1}).One(&school)

您选择

pdf
要检索的字段,但是您在MongoDB中的文档没有这样的字段:

type dbSchool struct {    ID  bson.ObjectId  `json:"id" bson:"_id,omitempty"`    ...    Pdfdata  []byte  `json:"pdf"`    ...}

此类型定义将导致有一个

pdfdata
字段,但没有
pdf
。添加适当的
mgo
struct标记:

type dbSchool struct {    ID  bson.ObjectId  `json:"id" bson:"_id,omitempty"`    ...    Pdfdata  []byte  `json:"pdf" bson:"pdf"`    ...}

或将所选字段从更改

pdf
pdfdata



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5476384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存