我已经开始使用expressJS 构建REST api。我是节点新手,所以请耐心等待。我希望能够让用户使用 /upload 路由的帖子将文件直接上传到 Mongo 的 GridFS。
根据我在expressJS文档中的理解,req.files.image对象在上传后的路由中可用,其中还包括路径和文件名属性。但如何才能准确读取图像数据并将其存储到 GridFS 中呢?
我调查过gridfs 流 https://github.com/aheckmann/gridfs-stream但我无法将结局连在一起。我是否需要首先读取文件,然后将该数据用于 writestream 管道?或者我可以只使用 Express 中的文件对象并使用这些属性来构造写入流吗?任何指示将不胜感激!
这是一个简单的演示:
var express = require('express');
var fs = require('fs');
var mongo = require('mongodb');
var Grid = require('gridfs-stream');
var db = new mongo.Db('test', new mongo.Server("127.0.0.1", 27017), { safe : false });
db.open(function (err) {
if (err) {
throw err;
}
var gfs = Grid(db, mongo);
var app = express();
app.use(express.bodyParser());
app.post('/upload', function(req, res) {
var tempfile = req.files.filename.path;
var origname = req.files.filename.name;
var writestream = gfs.createWriteStream({ filename: origname });
// open a stream to the temporary file created by Express...
fs.createReadStream(tempfile)
.on('end', function() {
res.send('OK');
})
.on('error', function() {
res.send('ERR');
})
// and pipe it to gfs
.pipe(writestream);
});
app.get('/download', function(req, res) {
// TODO: set proper mime type + filename, handle errors, etc...
gfs
// create a read stream from gfs...
.createReadStream({ filename: req.param('filename') })
// and pipe it to Express' response
.pipe(res);
});
app.listen(3012);
});
I use httpie https://github.com/jkbr/httpie上传文件:
http --form post localhost:3012/upload filename@~/Desktop/test.png
如果文件已上传,您可以检查您的数据库:
$ mongofiles list -d test
connected to: 127.0.0.1
test.png 5520
您也可以再次下载:
http --download get localhost:3012/download?filename=test.png
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)