将
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)
您选择
type dbSchool struct { ID bson.ObjectId `json:"id" bson:"_id,omitempty"` ... Pdfdata []byte `json:"pdf"` ...}
此类型定义将导致有一个
pdfdata字段,但没有
mgostruct标记:
type dbSchool struct { ID bson.ObjectId `json:"id" bson:"_id,omitempty"` ... Pdfdata []byte `json:"pdf" bson:"pdf"` ...}
或将所选字段从更改
pdfdata。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)