流星CollectionFS的Objc-C Mongodb驱动程序

时间:2014-01-07 19:51:46

标签: objective-c image mongodb meteor gridfs

我写了一个Objective-c应用程序,可以将文件写入我的meteor mongodb数据库。使用RadMongoDB(https://github.com/timburks/RadMongoDB)我将图像写入我的mongo的gridfs .files.chunks

//Defining RadMongoDB
RadMongoDB *rad = [[RadMongoDB alloc] init];

//Connection Dictionary
NSDictionary *connection = @{
                             @"host" : @"127.0.0.1",
                             @"port" : [NSNumber numberWithInt:3002]};

int num =[rad connectWithOptions:connection];
[rad writeFile:path2 withMIMEType:@"image/png" inCollection:@"contacts" inDatabase:@"meteor"]

图像(path2)已成功写入gridfs。我的meteor mondgodb shell我可以看到成功写的文件。

enter image description here

.chunks:

enter image description here

.files:

enter image description here

这些gridfs文件链接到collectionfs(https://github.com/CollectionFS/Meteor-CollectionFS)集合,其中包含通过流星应用程序插入的各种其他图片。问题是使用collectionfs将驱动程序写入的图像拉出来。很明显,驱动程序写入gridfs的文件不会被文件处理程序处理。因此我尝试通过(collectionfs filehandler reset)重新强制所有文件,但仍然无效:( Javascript下面,注意ContactsFS是与gridfs联系人对应的collectionfs集合。)

 //Reset
  ContactsFS.find({}).forEach(function(doc) {
    ContactsFS.update({ _id: doc._id}, { $set: { handledAt: null, fileHandler: {} }  });
  });
  //Set Completed to True
  ContactsFS.update(fileRecord, {$set: {complete: true}});

我得出结论,驱动程序与gridfs交互的方式与meteor和collectionfs读取和写入方式有很大不同。有没有什么办法解决这一问题?我非常渴望得到帮助,谢谢!

编辑:

设置上传的文件complete = true后,文件处理程序会尝试对插入的驱动程序文件执行操作。但是现在我收到服务器端错误: enter image description here

我相信这是因为collectionfs如何读取gridfs文件。 gridfs图像的数据由obj-c驱动程序存储为Uint8Array(如屏幕截图1所示)。我已经尝试在obj-c驱动程序映像上设置每个参数,以便collectionfs很高兴:

ContactsFS.update(imageid, {$set: {handledAt: null}});
ContactsFS.update(imageid, {$set: {uploadDate: date}});
ContactsFS.update(imageid, {$set: {countChunks: 1}});
ContactsFS.update(imageid, {$set: {numChunks: 1}});
ContactsFS.update(imageid, {$set: {length: len}});›
ContactsFS.update(imageid, {$set: {uploading: false}});
ContactsFS.update(imageid, {$set: {encoding: encode}});

//Setting complete to True will send the file through the filehandlers
ContactsFS.update(imageid, {$set: {complete: true}});

仍然没有。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

试试这个:

var len = "" + fileRecord.plength;
var chunkSize = 256 * 1024; // set this to whatever chunk size RadMongoDB is using
var chunkCount = Math.ceil(fileRecord.plength / chunkSize);

ContactsFS.update(imageid, {$set: {
  handledAt: null,
  uploadDate: Date.now(),
  countChunks: chunkCount,
  numChunks: chunkCount,
  length: len,
  uploading: false,
  encoding: 'binary'
}});

ContactsFS.update(imageid, {$set: {complete: true}});

也需要this issue中讨论的修复。