2012-04-21 3 views
1

Пожалуйста, смотрите на следующем рисунке, из http://mongoexplorer.com/:MongoDB GridFS - Это имя файла или файла

http://mongoexplorer.com/

Я пытался работать через GridFS, ссылаясь https://github.com/jamescarr/nodejs-mongodb-streaming. Файлы, которые я загрузил, хорошо возвращаются, и поток, который возвращается через следующую функцию, выглядит правильно.

var gridfs = (function() { 
    function gridfs() { } 
    gridfs.get = function (id, fn) { 
     var db, store; 
     db = mongoose.connection.db; 
     id = new ObjectID(id); 
     store = new GridStore(db, id, "r", { 
      root: "fs" 
     }); 
     return store.open(function (err, store) { 
      if (err) { 
       return fn(err); 
      } 
      return fn(null, store); 
     }); 
    }; 
    return gridfs; 
})(); 

Использование http://mongoexplorer.com/ Я загрузил файлы в GridFS, чтобы проверить с, но они, кажется, сломан, когда я использую код узла выше, чтобы получить их.

То есть, когда я заметил имя файла/fileName. Глядя сюда /node_modules/mongodb/lib/mongodb/gridfs/gridstore.js Я видел ссылку на имя файла с нижним регистром «N», но в моей GridFS это имя файла с капиталом «N».

ОК, так что для ударов я заменил его на нижний регистр в GridFS, но я все еще получаю некоторое повреждение в потоке (код узла выше) при загрузке файлов, загруженных с http://mongoexplorer.com/. Нажав Сохранить как ... в http://mongoexplorer.com/, однако возвращает мой штраф просто отлично.

Чтобы вернуться к моему вопросу, (поскольку мои тесты, похоже, ничего не доказывают), мне интересно, что это такое: имя файла с нижним регистром «N» или имя файла с «N» в шапках?

+0

ps. У меня нет 1500xp, необходимых для добавления тега [MongoExplorer]. –

+0

ради моего любопытства, я попробовал то же самое в C# ... похоже, что что-то смешное в драйвере node.js GridFS. pity –

+0

Думаю, я просто расскажу о некоторых примерах того, что делает код с файлом Windows. Файл загружен с помощью [MongoExplorer]. Также загружается отлично с помощью [MongoExplorer]. Однако поток узла GridStore управляет им. Вот они: [windows-before.txt] (http://dl.dropbox.com/u/1334455/windows-before.txt) и [windows-after.txt] (http://dl.dropbox.com /u/1334455/windows-after.txt) –

ответ

1

Пожалуйста, используйте новейший родной драйвер mongodb, так как есть тонна исправлений для GridFS, есть тонна примеров в каталоге github для драйвера в рамках тестов для использования GridFS в качестве потоков.

Docs находятся на

http://mongodb.github.com/node-mongodb-native

В общем, я бы сказал, что если вы используете основные функциональные возможности прилипнуть к водителю, как тот, который вы используете его, используя драйвер»способ даты, который объясняет проблемы с коррупцией.

+0

Я использовал версию 0.9.9-8. Я понимаю ваши рассуждения об использовании последнего драйвера узла, но должен сказать, что я обеспокоен тем, что мы находимся на небольшом узле острова ... MongoDB не только для node.js. Что касается поддержки файлов, загруженных в GridFS с использованием других платформ. Действительно ли ответ заключается в том, что вы используете узел для записи файлов, которые хотите читать с помощью узла? Таким образом, стремление к мышлению действительно делает технологию быстрой. –

+0

Чтобы доказать свою точку зрения, посмотрите, сколько узлов изменилось за несколько месяцев. Я бы хотел, чтобы узел просто немного покончил, поэтому можно завершить проект, не переписывая каждые несколько недель. Скажите, пожалуйста, если вы когда-либо пытались открыть файл из GridFS, который вы не загрузили с помощью node.js или собственного драйвера? Пожалуйста, не обижайтесь, но нужно помнить о мире за пределами node.js. –

1

Другой инструмент для Windows nl. MongoVue также ищет filename вместо fileName. Я бы сказал, что ответ скорее имени файла вместо fileName.


При получении файла малого окна из GridStore, я нашел ошибку, но я не знаю, как это исправить. Я думаю, там должно быть некоторое значение, как Chunk.CurrentSize или тому подобное, но, глядя на файл chunk.js в драйвере https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/gridfs/chunk.js Монго родной узел, я сделал следующее ...

Я нашел это:

Chunk.prototype.readSlice = function(length) { 
    if ((this.length() - this.internalPosition + 1) >= length) { 
    var data = null; 
    if (this.data.buffer != null) { //Pure BSON 
     data = this.data.buffer.slice(this.internalPosition, this.internalPosition + length); 
    } else { //Native BSON 
     data = new Buffer(length); 
     length = this.data.readInto(data, this.internalPosition); 
    } 
    this.internalPosition = this.internalPosition + length; 
    return data; 
    } else { 
    return null; 
    } 
}; 

и переехал следующий

data = this.data.buffer.slice(this.internalPosition, this.internalPosition + length); 

в этом случае утверждение (1024 * 256 это значение из Chunk.DEFAULT_CHUNK_SIZE = 1024 * 256;)

if (this.data.buffer != null) { //Pure BSON 
     if (this.data.buffer.length > 1024 * 256) { 
     // move to here 
     } 
     else 
     { 
     data = this.data.buffer; 
     } 

так:

Chunk.prototype.readSlice = function(length) { 
    if ((this.length() - this.internalPosition + 1) >= length) { 
    var data = null; 
    if (this.data.buffer != null) { //Pure BSON 
     if (this.data.buffer.length > 1024 * 256) { 
     data = this.data.buffer.slice(this.internalPosition, this.internalPosition + length); 
     } 
     else 
     { 
     data = this.data.buffer; 
     } 
    } else { //Native BSON 
     data = new Buffer(length); 
     length = this.data.readInto(data, this.internalPosition); 
    } 
    this.internalPosition = this.internalPosition + length; 
    return data; 
    } else { 
    return null; 
    } 
}; 

Проблема с окнами файлов меньше, чем размер блока будет решена, но это не самое элегантное решение. Я хотел бы предложить это в качестве ответа, но я понимаю, что использование стандартного размера куска жесткого кодирования не является динамическим значением, которое сделало бы это менее полезным ;-)

+1

Похоже, проблема заключается в поддержке GridFS Readstream для небольших файлов ASCII? –

Смежные вопросы