使用 gridfs 和 mongoose 在 MongoDB 中存储文件
storing files in mongodb using gridfs and mongoose
>我有以下代码
gridfs.js 具有以下写入文件字节的代码
exports.putFile = function(path, name, options, fn) {
var db;
db = mongoose.connection.db;
options = parse(options);
options.metadata.filename = name;
return new GridStore(db, name, "w", options).open(function(err, file) {
if (err) {
return fn(err);
}
return file.writeFile(path, fn);
});
};
猫鼬模式定义如下。猫鼬架构具有文件名和文件本身。
var fs = require('fs');
var mongoose = require('mongoose');
var db = mongoose.connection;
var gridfs = require('./gridfs');
var Schema = mongoose.Schema;
var trackDocsSchema = mongoose.Schema(
{
_id : Schema.Types.ObjectId,
docName: 'string',
files: [ mongoose.Schema.Mixed ]
}
);
trackDocsSchema.methods.addFile = function(file, options, fn) {
var trackDocs;
trackDocs = this;
return gridfs.putFile(file.path, file.name, options, function(err, result) {
if (err) console.log("postDocsModel TrackDocs Error: " + err);
trackDocs.files.push(result);
return trackDocs.save(fn);
});
};
var TrackDocs = mongoose.model("TrackDocs", trackDocsSchema);
调用的服务器代码如下所示。
exports.uploadFile = function (req, res) {
console.log("uploadFile invoked");
var trackDocs, opts;
trackDocs = new TrackDocs();
trackDocs._id = mongoose.Types.ObjectId(req.body._id);
trackDocs.docName = req.body.docName;
opts = {
content_type: req.files.file.type
};
return trackDocs.addFile(req.files.file, opts, function (err, result) {
if (err) console.log("api TrackDocs Error: " + err);
console.log("Result: " + result);
trackDocs.save();
console.log("Inserted Doc Id: " + trackDocs._id);
return res.json(true);
});
};
});
当我运行以下代码时,出现错误
api TrackDocs 错误:范围错误:超出最大调用堆栈大小,并且不会向 GridFS 添加任何内容。但是,如果我再次上传相同的文件,它确实会将其保存到 GridFS 中。
请注意,有两个 trackDocs.saves。我不确定这是否导致了问题或其他原因。
我是 NodeJS 和 Mongoose 的新手,所以任何帮助将不胜感激。
谢谢梅尔罗伊
不确定这是否有帮助,但它过去曾帮助过我。
毫不奇怪,不同的浏览器具有不同的调用堆栈大小。同样不足为奇的是,他们用于确定调用堆栈的方法也各不相同。我可以测量的各种调用堆栈大小是(给予或接受,可能相差 1 或 2):
我们自己运行了一些测试,以便使用以下简单代码获取其他浏览器/主机/操作系统上的调用堆栈大小:
var i = 0;
function recurse () {
i++;
recurse();
}
try {
recurse();
} catch (ex) {
alert('i = ' + i + ''nerror: ' + ex);
}
http://javascriptrules.com/2009/06/30/limitation-on-call-stacks/
在说一个选项可以传递--max-stack-size
到节点。
设置最大 v8 堆栈大小(字节)
node --max-stack-size 32000 app.js
注意:帮助将其打印为--max-stack-size
,node -v
v0.10.x+
您需要改用--stack-size
。
相关文章:
- 如何从 Django 浏览本地文件并存储文件信息
- 正在从本地windows存储文件夹读取js中的文件
- 在 Java 中使用 IE/Chrome HTML 渲染器或使用 JavaScript 存储文件
- 在 PhantomJS 中自动删除本地存储文件
- 使用 gridfs 和 mongoose 在 MongoDB 中存储文件
- 如何使用 JavaScript 在浏览器中存储文件
- PhoneGap 如何在本地文件系统中存储文件
- 使用 Paper.js、Meteor 和 MongoDB 存储和检索路径
- Node.js:从MongoDB到文件的流式传输
- 在mongodb存储标记中,我应该使用联合字符串还是数组
- HTML5上传没有't在服务器上存储文件
- 在智能手机上本地存储文件路径/图像,稍后上传
- mongoDB——存储相同数据的两种方法的优缺点
- 如何使用html和java脚本在windows azure移动服务中存储文件(简历)
- 我可以在内存中存储文件吗?node . js
- 使用Node.js和MongoDB存储密码
- “拯救As"angular应用中的HTML5本地存储文件
- 移动应用程序的dropbox api是否使用本地dropbox文件夹来获取和存储文件
- 使用 gridFS 在 mongoDB 中存储文件(图像)
- Filepicker.IO -选择导出目的地后上传/存储文件