Tag: gridfs

如何使用文件和数据在Node Express中发送响应

module.exports.validateUser = function (req, res) { User.find({ 'username': req.body.username, 'password': req.body.password }, function (err, result) { if (result.length) { var gridfs = req.app.get('gridfs'); var readstream = gridfs.createReadStream({ _id: result[0]._doc.picture }); req.on('error', function (err) { res.send(500, err); }); readstream.on('error', function (err) { res.send(500, err); }); // Just sends the file //readstream.pipe(res); res.send('This is incedible'); } else […]

如何使用multer-gridfs-storage,express,mongodb在用户configuration文件中添加图像path

下面是我的file upload代码 /** Setting up storage using multer-gridfs-storage */ var storage = GridFsStorage({ gfs : gfs, filename: function (req, file, cb) { var datetimestamp = Date.now(); cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1]); }, /** With gridfs we can store aditional meta-data along with the file */ metadata: function(req, file, cb) […]

GridFS中的自定义字段

它可能在GridFS中保存自定义字段,即时通讯使用NodeJS和gridfs-stream模块。 该文件被保存为下一个模式: { _id: "5208b9929e462bc24b000001", filename: "algo.txt", contentType: "binary/octet-stream", length: 133074, chunkSize: 262144, uploadDate: "2013-08-12T10:31:46.152Z", aliases: null, metadata: null, md5: "56cd6b2057623bfb70111b883678d436" } 它可能添加自定义字段与上传文件的用户标识。 其他的可能性可以放在元数据中,但后来发现它很贵。

gridfs-stream总是将文件存储为“contentType:binary / octet-stream”

我试图编写一个程序在nodejs中存储在MongoDB中的文件列表。 它工作正常,但有一个问题:它始终将contentType元数据存储为二进制/八位字节stream,我希望它存储实际的MIMEtypes。 我曾尝试在readStream(通过promises)之前获取mimetypes,但即使我对contentType进行了硬编码(例如“image / jpeg”),也始终将元数据保存为“binary / octet-stream”。 这是我的代码: files.forEach(function(f) { var conn = mongoose.createConnection(db); conn.once('open', function () { var gfs = Grid(conn.db); var writeStream = gfs.createWriteStream({ filename: f.location, mode: 'w', contentType: 'image/jpeg' }); writeStream.on('finish', function() { console.log('Storing', f.location, 'OK'); return; }) .on('error', function(data) { console.log('Error', f.location, data) }); fs.createReadStream(path.join(__dirname, 'files', f.location), 'utf-8') .pipe(writeStream); }); }); […]

GridFS:清理所有未被引用的文件

我刚刚在MongoDB中的GridFS中存储东西。 在testing过程中,我注意到许多文件正在创build,但没有正确删除。 我有一个收集users ,其中有一个字段的avatar 。 它包含文件的ObjectId 。 现在我想有一些命令可以用来删除那些没有引用的files和chunks 。 有一个查询可以做到这一点? 也许'地图减less'? 另外我不知道如何正确删除node-mongodb-native GridFS-Files。

asynchronous问题,同时上传多个文件

嗨,我想上传多个文件,文件写入是适当的。 但我想将文件移动到mongo网格fs中,第一个文件只是正确移动文件的其余部分不会移动到网格fs中,也不会解除链接。 这是我的代码: for (var i = 0; i < files.length; i++) { (function(i) { var singleFile = files[i]; var fileData = JSON.parse(files[i].name); var fileName = fileData.fileName; var fileType = files[i].type; var uniqId = fileData.attachmentId; var targetPath = "./attachments/" + uniqId; var tmp_path = files[i].path; console.log("uniqId : " + uniqId); //uploadFile(tmp_path,targetPath,fileName,uniqId,fileType); fs.readFile(tmp_path, function(err, data) { […]

在MongoDB / NodeJs / GridFS堆栈中从GridFS下载文件的问题

我正在使用NodeJs API,并select使用GridFS来存储和下载文件。 我有两个API的这个问题:上传和下载。 当我用邮递员给他们打电话时,这两个API都是完美的; 但是我有一个问题使用浏览器下载文件。 看起来浏览器看到的是200个HTTP代码,并且期望文件在内容仍然stream式传输时立即在那里。 因此,它抱怨图像或PDF等有错误或格式无效。 唯一正在工作的文件types是MP3,浏览器启动MP3播放插件播放该音乐。 var Grid = require('gridfs-stream'); Grid.mongo = mongoose.mongo; var gfs = new Grid(mongoose.connection.db); //…. some code in here exports.download = function(req, res) { gfs.files.find({ "_id": mongoose.Types.ObjectId(req.params.id) }).toArray(function (err, files) { if(files.length===0){ return res.status(400).send({ message: 'File not found' }); } var readstream = gfs.createReadStream({ filename: files[0].filename }); readstream.pipe(res); }); […]

为什么gridfs只能通过文件名来处理文件id(ObjectId)

我正在使用nodejs mongodb mongoose和gridfs。 当我试图通过它的filname得到一个文件everthing是伟大的,如果我想通过ID得到它我得到错误:您想要阅读的文件不存在。 我下面的代码console.log(“res.pic_id:”+ res.pic_id)我得到正确的ObjectId。 代码如下: var GridFS = require('GridFS').GridFS; var myFS = new GridFS('db'); var fs = require('fs') var Profile = db.model('Profile'); Profile.findOne({'_id' : clientID},['_id', 'username','pic_id','pic_filename'],function(err, res){ if (err) { console.log("ERROR serching user info: " + err); callback(JSON.stringify(JSONRes(false, err))); } else { if (res) { console.log("res.pic_id : " + res.pic_id); myFS.get(res.pic_id,function(err,data){ if (err) […]

MongoDB GridFS的“非法块格式”exception

我一直在Node.js上编写一个应用程序,用于将图像存储在MongoDB的GridFS文件系统中。 我已经通过应用上传图片,并且图片显示为正确存储: $ mongofiles -v -d speaker-karaoke get howard-basement-100×115.jpg Tue Jul 17 12:14:16 creating new connection to:127.0.0.1 Tue Jul 17 12:14:16 BackgroundJob starting: ConnectBG Tue Jul 17 12:14:16 connected connection! connected to: 127.0.0.1 done write to: howard-basement-100×115.jpg 这抓住了MongoDB的.jpg,我可以打开它没有问题,所以它看起来像我上传正在正确存储。 但是,在我正在运行的应用程序中,当我尝试读取同一个文件时,我得到: 12:15:44 web.1 | started with pid 89621 12:15:45 web.1 | Connecting to mongodb://localhost/speaker-karaoke 12:15:45 web.1 | […]

Nodejs – HTTP范围支持/部分文件下载

我正在创build一个音乐networking应用程序,用于存储我在MongoDB(GridFS)中存储的MP3。 我的问题:如何添加HTTP范围支持,以便我可以开始stream式传输1/2audio文件,而无需等待缓冲区。 我知道GridFS支持读取X字节 – X字节,所以基本上我只需要知道如何让nodejs了解它只需要字节X – X. 谢谢!