2014-04-07 55 views
1

我想使用快遞做一些文件上傳,但我在請求數據事件上有問題。 即使我在其上放置了一些控制檯日誌記錄測試,數據事件也不起作用。與nodeJS快速請求數據事件不起作用

這裏是我的服務器代碼:

var express = require('express'); 
var fs = require('fs'); 
var app = express(); 

//parser 
app.use(express.bodyParser()); 


//form 
app.get('/', function (req, res){ 
    res.sendfile(__dirname + "/upload.html"); 
}); 

//post 
app.post('/', function(req, res){ 
     var imageName = req.files.image.name; 
     //error 
     if(!imageName){ 
      console.log("Error"); 
      res.redirect("/"); 
      res.end(); 
     } else { 

       var file = fs.createWriteStream(__dirname + "/uploads/" + imageName); 
       var fileSize = req.headers['content-length']; 
       var uploadedSize = 0; 
       req.on('data', function (chunk) { 
        var bufferStore = file.write(chunk); 
        if(bufferStore == false) 
         req.pause(); 
        uploadedSize += chunk.length; 
        uploadProgress = (uploadedSize/fileSize) * 100; 
        console.log(Math.round(uploadProgress) + "%" + " uploaded\n"); 
       }); 
       file.on('drain', function() { 
        req.resume(); 
       }); 

       req.on('end', function() { 
        console.log('Upload done!'); 
        res.end(); 
       }); 
     } 

}); 
app.listen(5000); 

這是我的客戶端代碼:

<!DOCTYPE HTML> 
<html> 
    <body> 
     <form method='post' enctype='multipart/form-data'> 
     <input type='file' name='image'/> 
     <input type='submit' /></form> 
    </body> 
</html> 

回答

0

添加該模塊:

var path = require('path'); 

然後,嘗試用它來取代你的帖子行動:

app.post('/', function(req, res) { 
    var uploadDir = __dirname + '/uploads/'; 

    if(!path.existsSync(uploadDir)){ 
     fs.mkdirSync(uploadDir, 0755); 
    } 

    var filename = req.files.image.name; 
    fs.readFile(req.files.image.path, function (err, data) { 
     var save_path = uploadDir + filename; 
     fs.writeFile(save_path, data, function (err) { 
      if(err){ 
       res.json({ 
        error: 'Error!' 
       }); 
      } else { 
       res.json({ 
        success: true 
       }); 
      } 
      fs.unlink(req.files.image.path, function (err) { 
       if (err) throw err; 
      }); 
     }); 
    }); 
}); 
+0

完美無瑕地工作,但我不能將它用作流?我試圖在上傳過程中顯示進度,還有另一種方法可以在沒有流式傳輸的情況下進行嗎? –

+0

你可以試試這個:http://new-bamboo.co.uk/blog/2012/01/10/ridiculously-simple-ajax-uploads-with-formdata –

+0

謝謝你,只是設法解決我的問題=) –