【发布时间】:2017-10-17 07:36:32
【问题描述】:
我阅读了多篇关于使用 mgo 保存文件的博客,但无法找到满足以下特定需求的解决方案,请大喊大叫!
下面在 MongoDb 中插入对象:
var dbSchoolPojo dbSchool
i := bson.NewObjectId()
dbSchoolPojo.ID = i
coll := db.C("school")
coll.Insert(&dbSchoolPojo)
以下可以获取文件:
file, handler, err := r.FormFile("pdf") //Able to get file from r *http.Request
现在,在插入对象之前,我需要设置上面的文件,如:
dbSchoolPojo.pdf = file.Bytes(); //Of course Bytes() is invalid method
我的结构对象:
type dbSchool struct {
ID bson.ObjectId `json:"id" bson:"_id,omitempty"`
...
Pdf []byte `json:"pdf" bson:"pdf"`
...
}
用外行的话来说,问题是:如何使用 mgo 驱动程序通过 GoLang 结构在 mongoDb 中插入文件(从 HTML 表单接收)?
感谢阅读! :)
更新:
PDF 存储在 MongoDB 中,如下所示:
Binary('EWHKDSH876KJHlkjdswsddsfsd3232432njnjkn2dljDSFSDFIJSFD333...')
以下代码可以正常工作,但不提供 PDF 文件:
func DownloadPdf(w http.ResponseWriter, r *http.Request, db mongoDB) {
var school dbSchool
coll := db.C("schools")
incomingId = "59e6404e2f68182a74610f19"; //This mongo DB _id is received from GET URL request
err := coll.Find(bson.M{"_id": bson.ObjectIdHex(incomingId)}).
Select(bson.M{"pdf": 1}).One(&school)
if err != nil {
serve404(w, r, db)
return
}
buffer := school.Pdf
w.Header().Set("Content-Disposition", "attachment; filename=abc.pdf")
w.Header().Set("Content-Type", "application/pdf")
w.Header().Set("Content-Length", strconv.Itoa(len(buffer)))
if _, err := w.Write(buffer); err != nil {
log.Println("unable to serve image.") //This line is not executed
}
}
请求内容的jQuery代码:
$(".downloadPdfFile").click(function() {
var domain = document.location.origin;
window.open(domain+'/brochure/59e6404e2f68182a74610f19', '_blank');
});
【问题讨论】:
标签: jquery mongodb file go mgo