2

我使用 Delphi 和 TmongoWire。我想TFileStream (picture, pdf)在 MongoDb 服务器上插入 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
  ]);

谢谢

4

2 回答 2

0

请参考本教程: http: //owlyci.com/docs/articles/WorkingWithGridFS

在 GridFS 中,文件由名称(或 _id 在极少数情况下)引用,因此您应该使用一些文件名(aaa.jpg、81276482634823.dat 或任何其他)将流保存到 GridFS,然后将此文件名存储到您的集合中

d:=BSON([
  'id',mongoObjectID,
  'name',ItemForm.txtName.Text,
  'address',ItemForm.txtAddress.Text,
  'phone',ItemForm.txtPhone.Text,
  'picture', 'aaa.jpg'
]);
于 2013-10-20T15:46:09.963 回答
0

MongoDB 有自己的子系统专门用于存储(大)文件:GridFS

在这里查看更多信息:http: //docs.mongodb.org/manual/core/gridfs/

对于使用它的 TMongoStream 对象:https ://github.com/stijnsanders/TMongoWire/blob/master/mongoStream.pas

(为了完整起见:Delphi 自己不知道如何将 TFileStream 转换为 Variant,这会导致错误。)

于 2013-10-18T18:21:01.667 回答