我使用Delphi和TmongoWire。我想在MongoDb服务器上插入TFileStream (picture, pdf)
TmongoWire。我的工作基于此演示文件:Delphi MongoDB driver
d:=BSON([
'id',mongoObjectID,
'name',ItemForm.txtName.Text,
'address',ItemForm.txtAddress.Text,
'phone',ItemForm.txtPhone.Text,
'picture', TFileStream.Create('C:\temp\mongotest.jpeg', fmOpenRead or fmShareDenyWrite)
]);
FMongoWire.Insert(mwx1Collection,d);
//LoadItems;
LoadItem(ListView1.Items.Add,d);
UpdateCount;}
插入流文件不起作用,有人能看出原因吗?
程序无法编译:错误 - >无法使用这些参数调用BSON
插入简单的文本字段(下面的代码)没有问题:
d:=BSON([
'id',mongoObjectID,
'name',ItemForm.txtName.Text,
'address',ItemForm.txtAddress.Text,
'phone',ItemForm.txtPhone.Text
]);
由于
答案 0 :(得分:0)
MongoDB拥有自己的子系统,专门用于存储(大型)文件:GridFS
在此处查看更多内容:http://docs.mongodb.org/manual/core/gridfs/
以及使用它的TMongoStream对象:https://github.com/stijnsanders/TMongoWire/blob/master/mongoStream.pas
(为了完整起见:Delphi本身并不知道如何将TFileStream转换为Variant,这会导致错误。)
答案 1 :(得分:0)
请参阅本教程:http://owlyci.com/docs/articles/WorkingWithGridFS
在GridFS中,文件由名称引用(或在极少数情况下为_id),因此您应该使用某些文件名(aaa.jpg,81276482634823.dat或任何其他文件)将流保存到GridFS,然后将此文件名存储到您的集合中< / p>
d:=BSON([
'id',mongoObjectID,
'name',ItemForm.txtName.Text,
'address',ItemForm.txtAddress.Text,
'phone',ItemForm.txtPhone.Text,
'picture', 'aaa.jpg'
]);