我正在使用valums ajax file-uploader
我的nodejs服务器端看起来像这样:
fileStream = fs.createWriteStream(__dirname+'/../public/images/houses/'+rndname);
req.pipe(fileStream);
req.on('end', function() {
body = '{"success":"true", "name": "'+rndname+'"}';
res.writeHead(200,
{ 'Content-Type':'text/plain'
, 'Content-Length':body.length
});
res.end(body);
});
客户方:
function createUploader(){
var uploader = new qq.FileUploader({
element: document.getElementById('homepic'),
action: '/server/upload',
allowedExtensions: ['jpg', 'png', 'gif'],
multiple:true,
onComplete: function(id, fileName, responseJSON){
$("#homepic").append("<img src='/images/houses/"+responseJSON.name+"' class='mediumpic' /> ");
}
});
}
window.onload = createUploader;
这一切都适用于单个文件上传!
所以想象一下 - 我按上传按钮,选择了pic,上传速度非常快,在屏幕上显示。 现在我想上传另一个。我选择pic,它在服务器上快速上传(我在服务器上看到它),我收到新文件名和成功的响应,我把图片放在屏幕上我的追加。但图片没有显示出来。我尝试打开新标签只是图片仍然没有,即使我看到它站在正确的目录服务器上。在等待3-5分钟之后它就会显示出来,甚至不需要页面刷新。是什么导致了这种行为?它是管道,我需要打电话给马里奥来解决它或其他什么? :)
答案 0 :(得分:4)
将我的req.pipe更改为req.on('data')并开始工作。不知何故,似乎我的req.pipe没有关闭连接,即使所有文件都已上传,他也“期待”更多的数据。这就是为什么我无法调用GET进行归档并且处于“挂起”状态的原因。 这解决了我的问题:
req.on('data', function(data) {
ws.write(data);
});
req.on('end', function(data) {
var body = '{"success":"true", "name": "'+rndname+'"}';
res.writeHead(200,
{ 'Content-Type':'text/plain'
, 'Content-Length':body.length
});
res.end(body);
});
即使我找到了问题的解决方案,如果有人知道为什么req.pipe没有关闭连接并且被挂了2-3分钟直到pic出现,请告诉我。
答案 1 :(得分:1)
我创建了一个Express 3.x中间件组件,允许您通过req.files
集合访问valums / fineuploader上传的文件。
您需要做的就是在Express配置期间添加中间件,如下所示:
var fineuploaderExpressMiddleware = require('fineuploader-express-middleware');
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(fineuploaderExpressMiddleware({ uploadDir: '/tmp ' }));
该组件可在此处获取:https://github.com/suprememoocow/fineuploader-express-middleware