【发布时间】:2015-07-02 23:33:43
【问题描述】:
我一直在尝试使用以下代码上传文档。
我用谷歌搜索过,目前还没有找到任何解决方案。
app.post('/documents', function (req, res) {
var document = {};
var fstream = null;
// populate fields
form.on("field", function (name, value) {
document[name] = value ;
});
form.on("part", function (part) {
if (!part.filename) {
return;
}
var path = __dirname + '/files/' + part.filename;
fstream = app.npm.fs.createWriteStream(path);
document.type = part.headers["content-type"]
document.name = part.filename;
document.size = part.byteCount;
document.path = path;
fstream.on("close", function () {
db.sequelize.models.Document.create(document).then(function (newDocument) {
res.send(newDocument)
res.end();
},
function (error) {
res.send(error);
});
});
part.pipe(fstream);
});
form.on("close", function (data) {
fstream.end();
fstream = null;
});
form.parse(req);
});
注意:我正在使用 fs 模块。 https://nodejs.org/api/fs.html
第一张图片正常。但是当我尝试上传另一张图片时,它会引发异常:
events.js:72 投掷者; // 未处理的“错误”事件 ^
错误:结束后写入 在 writeAfterEnd (_stream_writable.js:132:12) 在 Form.Writable.write (_stream_writable.js:180:5) 写入时 (_stream_readable.js:601:24) 在流动(_stream_readable.js:610:7) 在 IncomingMessage.pipeOnReadable (_stream_readable.js:642:5) 在 IncomingMessage.emit (events.js:92:17) 在 emitReadable_ (_stream_readable.js:426:10) 在 emitReadable (_stream_readable.js:422:5) 在 readableAddChunk (_stream_readable.js:165:9) 在 IncomingMessage.Readable.push (_stream_readable.js:127:10)
【问题讨论】:
-
请不要这样使用
eval()(read here why not)。 -
@robertklep 完全同意!我将对此进行进一步重构....但是我找不到任何其他方法来使用表单数据设置多部分流。
-
document[name] = value? -
@robertklep 我觉得很丢脸。谢谢!
标签: javascript node.js fs