我试图弄清楚如何可以将图像直接发布到GridFS而不先将其作为临时文件存储在服务器上的任何位置。
我正在使用Postman(chrome ext。)发布文件,并且使用以下方法设法将此帖子存储为文件:
req.pipe(fs.createWriteStream('./test.png'));
当从服务器上的文件创建readStream时,我也能够从readStream直接存储到GridFS。(请参见代码)
我有以下文件,saveFromReq.js
它们侦听POST并基本上将其传递给savePic.js
。
saveFromReq.js:
var express = require('express');
var app = express();
var savePic = require('./savePic');
var fs = require('fs');
var GridStore = require('mongodb').GridStore;
var pic = './square.png';
var picID;
//When the following
//var pic = fs.createReadStream('./square.png', {autoClose: true});
//is not commented out, and 'req' is replaced with 'pic' in the savePic function,
//the file square.png is stored correctly to GridFS
app.post('/picture', function(req, res){
savePic(req, function(id){});
res.writeHead(200, {'Content-Type': 'text' });
res.end("Sucsess!\n");
});
app.listen(process.env.PORT || 3413);
savePic.js:
var savePic = function(req, callback){
var Db = require('mongodb').Db,
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
ReplSetServers = require('mongodb').ReplSetServers,
ObjectID = require('mongodb').ObjectID,
Binary = require('mongodb').Binary,
GridStore = require('mongodb').GridStore,
Grid = require('mongodb').Grid,
Code = require('mongodb').Code,
BSON = require('mongodb').pure().BSON,
assert = require('assert');
fs = require('fs');
//When the following
//req.pipe(fs.createWriteStream('./test.png'));
//is not commented out, the correct image is stored to test.png, and
//the sequence after req.on("data"... starts
//(That sequence does not start at all when this is commented out..)
var fileId = new ObjectID();
var db = new Db('testDB', new Server('localhost', 27017));
// Establish connection to db
db.open(function(err, db) {
var gridStore = new GridStore(db, 'test', 'w');
//open
gridStore.open(function(err, gridStore) {
console.log("opened");
req.on("data", function (data) {
console.log("data recieved");
gridStore.write(data, function (err, gridStore) {
if (err) {
console.log("error writing file");
}
});
});
req.on("end", function () {
gridStore.close(function (err, gridStore) {
if (!err) {
console.log("The file has been stored to database.");
db.close();
}
});
});
req.pipe(gridStore);
});
});
callback(fileId);
};
module.exports = savePic;
任何帮助将不胜感激!
gridfs-stream
使事情变得很简单:
// `gfs` is a gridfs-stream instance
app.post('/picture', function(req, res) {
req.pipe(gfs.createWriteStream({
filename: 'test'
}));
res.send("Success!");
});
问题内容: 我试图在我的node.js应用程序中设置文件API。我的目标是能够直接将文件流写入gridfs,而无需最初将文件存储到磁盘。似乎我的创建代码正在运行。我能够将文件上传保存到gridfs。问题是正在读取文件。当我尝试通过Web浏览器窗口下载保存的文件时,看到文件内容包裹着以下内容: 所以我的问题是,在将文件保存到gridfs之前,我该怎么做才能从文件流中剥离边界信息?这是我正在使用的代码
问题内容: 目前,我使用angular-file- upload处理图像上传,我只是将图像保存到服务器的文件系统中,并在HTML中引用它。但是,我想尝试将图像直接存储在为博客文章定义的架构内的数据库中。 我要这样做,这样我就可以拥有一个存储图像本身的字段。我当时想我可以像以前一样上传图像,但是在上传图像之后将其转换并以二进制(或其他形式)存储在Mongo中。这可能吗? 谢谢! 问题答案: 下面的示
问题内容: 如何在Node.js或Express.js中发出HTTP请求?我需要连接到另一个服务。我希望该调用是异步的,并且该回调包含远程服务器的响应。 问题答案: 这是我的示例中的一些代码片段。它是异步的,并返回JSON对象。它可以执行任何形式的GET请求。 请注意,还有更多的最佳方法(仅作为示例)-例如,与其将放入数组的块连接起来并进行连接等,不希望将它们串联在一起。希望,它可以使您朝正确的方
我正在编写一个使用React作为前端的程序,以及一个用于后端的Express/Node API,然后在MongoDB数据库中执行CRUD操作。现在,我正在使用本地JS抓取()API在我的前端执行GET/POST操作。GET请求工作正常,但是我的POST请求似乎不工作。在我的前端,我有一个表单和一个表单提交处理程序,如下所示: 然后在端口5002上的Express API上,我有: 然而,当表单提交
本文向大家介绍基于node.js依赖express解析post请求四种数据格式,包括了基于node.js依赖express解析post请求四种数据格式的使用技巧和注意事项,需要的朋友参考一下 node.js依赖express解析post请求四种数据格式 分别是这四种: www-form-urlencoded form-data application/json text/xml 1、www-for
主要内容:获取GET请求内容,实例,实例,获取 POST 请求内容,基本语法结构说明,实例在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js GET/POST请求。 获取GET请求内容 由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数。 node.js 中 url 模块中的 parse 函数提供了这个