我一直在尝试使用以下代码上传文档。
我做了Google搜索,但还没有找到任何解决方案。
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)
答案 0 :(得分:5)
找到了解决方案。
var form = new app.npm.multiparty.Form();
这是在全球范围内定义的。 对于每个新请求,我应该创建一个新的表单实例,因为在前一个调用中流是关闭的,所以我应该通过获取最新内容来创建一个新实例。
解决方案看起来像:
app.post(' / documents',function(req,res){
var document = {};
var form = new app.npm.multiparty.Form();
var fstream = null;
...
其余的都一样。