мне нужно сохранить некоторые файлы, такие как: изображения, видео, PDF ... В MongoDB, поэтому я использую gridfs-поток и express.jsсохраненных файлов непосредственно в MongoDB с gridfs потоком
var file = req.files.file;
req.pipe(gfs.createWriteStream({
filename:file.originalname,
mode:"w",
chunkSize:1024*4,
content_type:file.mimetype,
root:"fs"
})
res.send(200);
для тестирования я использовать почтальона и установить POST-запрос таким образом:
POST /fs/upload HTTP/1.1
Host: localhost:5000
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="file"; filename="epic.png"
Content-Type: image/png
----WebKitFormBoundaryE19zNvXGzXaLvS5C
проблема заключается в том, что этот способ просто хранить данные файла:
{
"_id" : ObjectId("54d14ec5b102fe401519a3c1"),
"filename" : "epic.png",
"contentType" : "image/png",
"length" : 0,
"chunkSize" : 4096,
"uploadDate" : ISODate("2015-02-03T22:42:14.730Z"),
"aliases" : null,
"metadata" : null,
"md5" : "993fb9ce262a96a81c79a38106147e95"
}
но не содержание, которое я имею в виду для двоичных данных для него, в mongodb - это хранилище, для которого длина проформы равна 0, bacause не имеет никаких кусков в fs.chucks.
ли это действительно работает для вас, потому что это не для меня. Файл никогда не помещался в Gridfs, хотя я получил ошибку, что end() не является функцией. –
Btw: Ваш пример работает сейчас, если я удаляю функцию события «утечка» вокруг «this.upload.end()». Есть ли проблемы, если я реализую это таким образом? –
Хорошая точка, я не уверен, что промежуточное программное обеспечение multer takecare somethig похоже на событие стока, когда файлы разбора могут быть с свойством [inMemory] (https://github.com/expressjs/multer#inmemory), которые должны работать, если мультер использовать трубу или некоторые аналогичные в противном случае colud используют другое промежуточное программное обеспечение, которое использует трубу – Maxtermax