【发布时间】:2017-07-15 18:56:40
【问题描述】:
在我的项目中,我使用blueimp jQuery-File-Upload plugin 将一个几 GB 的大文件以块的形式上传到服务器 - 一次 10MB 块。
我在 Node.js 后端有一个 writeStream 附加到一个 express-session,这样来自 2 个不同用户的文件上传就不会搞砸。我为每次上传创建一个writeStream 并将其附加到会话中。
问题是,当后端收到第一个数据块时,在会话中找不到writeStream.write。
我的 Node.js / Express.js 代码的相关部分:
// session config:
expressApp.use(session({
genid: function(req) {
return uuidV1();
},
secret: '***',
resave: true,
saveUninitialized: true,
cookie: { secure: false }
}));
// create writeStream
expressApp.post('/createStream', function(request, response) {
request.session.wstream = fileSystem.createWriteStream(uploadsDirectoryLocation + '/' + request.body.fileName);
request.session.wstream.on('finish', function() {
console.log('*********************************** file has been written ***********************************');
});
response.send({ response: 'success' });
});
// on every chunk received, write to the stream
expressApp.post('/uploadFile', function(request, response) {
var size = 0;
console.log(request.session.wstream); // the attached 'wstream' does show up
request.on('data', function(data) {
size += data.length;
request.session.wstream.write(data); // app crashes here
console.log('Got chunk: ' + data.length + ' total: ' + size);
console.log('data', data);
});
request.on('end', function() {
console.log("total size = " + size);
response.send("response");
});
request.on('error', function(e) {
console.log("ERROR: " + e.message);
response.send("response");
});
});
// close the stream
expressApp.post('/closeStream', function(request, response) {
request.session.wstream.end();
response.send({ response: 'success' });
});
确切的错误是:
streamObj.wstream.write(data);
^
TypeError: Cannot read property 'write' of undefined
我在这里做错了什么?
编辑:
然而,如果我没有将 writeStream 附加到会话并保持全局,它确实有效。但是,不适用于不同的会话。
我该如何解决这个问题?
【问题讨论】:
-
为什么投反对票?
标签: javascript node.js session express express-session