2016-11-22 66 views
2

我們想要實現一個功能,通過ajax調用將多個文件上傳到ExpressJS服務器並返回其所有唯一的URL。使用強大的節點文件上傳不起作用

以下是我的前端代碼示例:

var formData = new FormData(); 
for (var i = 0; i < nameId.length; i++) { 
    if($(nameId[i])[0].files[0]){ 
     formData.append(nameId[i], $(nameId[i])[0].files[0], $(nameId[i])[0].files[0].name); 
    } 
} 
$.ajax({ 
    url: '/upload-files', 
    type: 'POST', 
    data: formData, 
    processData: false, 
    contentType: false, 
    success: function(data){ 
     console.log('upload successful!'); 
     console.log(data); 
    } 
}); 

而在我們的路由器,我們下面的代碼片斷接受請求並存儲文件:曾

router.post('/upload-files',function(req, res, next){ 
    var form = new formidable.IncomingForm(); 
    form.multiples = true; 
    form.uploadDir = path.join(__dirname, '/uploads'); 
    form.on('file', function(field, file) { 
     console.log("File incoming"); 
     fs.rename(file.path, path.join(form.uploadDir, file.name)); 
    }); 
    form.on('error', function(err) { 
     console.log('An error has occured: \n' + err); 
    }); 
    form.on('end', function() { 
     res.end('success'); 
    }); 
}); 

但是,沒有什麼發生在路由器中。請求進入路由器內部,但之後什麼都沒有。

這裏有什麼不對嗎?在長時間的等待請求失敗後,我們沒有在服務器端和客戶端發生任何錯誤。

請建議。 感謝

回答

1

我能夠加入&更新下面的代碼片段來解決它:

在上傳請求處理函數添加代碼:

form.parse(req); 

而且在更新app.js下面的代碼片段於:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended:false})); 

到(要處理multipart

body-parser deprecated undefined extended: provide extended option 
:啓動服務器seperatly
數據)

app.use(bodyParser.json()) 
    .use(bodyParser.urlencoded()); 

注:由於解析器的變化以下警告消息來了