我写了一个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我可以看到成功写的文件。
.chunks:
.files:
这些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
后,文件处理程序会尝试对插入的驱动程序文件执行操作。但是现在我收到服务器端错误:
我相信这是因为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}});
仍然没有。我该如何解决这个问题?
答案 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中讨论的修复。