nodejs上的Valums文件上传器 - 多个文件上传

时间:2011-11-24 10:48:11

标签: node.js file-upload

我正在使用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分钟之后它就会显示出来,甚至不需要页面刷新。是什么导致了这种行为?它是管道,我需要打电话给马里奥来解决它或其他什么? :)

2 个答案:

答案 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