2011-11-24 239 views
4

我使用valums ajax file-uploaderValums文件上傳 - 多文件上傳

我的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; 

這一切工作單個文件上傳很棒!

所以想象 - 我按上傳按鈕,選擇圖片,它上傳真的很快,顯示在屏幕上。 現在我想上傳另一個。我選擇圖片,它在服務器上快速上傳(我在服務器上看到它),我得到新文件名和成功的響應,我把圖片放在屏幕上,並附上我的附件。但圖片沒有顯示出來。我嘗試在新標籤中打開圖片,儘管我在站在右側的服務器上看到它仍然沒有。等待3-5分鐘後,它就會顯示出來,甚至不需要刷新頁面。什麼導致這種行爲?這是管道,我需要打電話給馬里奧修理它或其他東西? :)

+0

按照[GitHub的頁面(https://開頭github.com/valums/file-uploader)這個項目已經轉移到http://fineuploader.com/上面的鏈接中斷。 – Sukima

回答

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 didnt密切的聯繫,並堅持掛像2-3mins直到PIC出現,讓我知道。

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