2014-09-24 3 views
2

Я пытаюсь сделать загрузку файлов с помощью angularjs, используя библиотеку угловых файлов загрузки (https://github.com/danialfarid/angular-file-upload)AngularJS File Upload для Backend Express Server

Вот мой код

// ===============================My HTML File=========================== 
<input type="file" ng-file-select="onFileSelect($files)"> 


// ===============================My Controller========================== 
var $scope.formObj = { 
    name: "Test" 
}; 

var fileToUpload; 

$scope.onFileSelect = function (file) { 
fileToUpload = file[0]; 
}; 

// POSt request to /api/items 
$scope.addItem = function() { 
    console.log($scope.formObj); 
    $scope.upload = $upload.upload({ 
    url: '/api/items', 
    method: 'POST', 
    data: { myObj: $scope.formObj }, 
    file: fileToUpload 
    }).success(function(data, status, headers, config) { 
    console.log("success"); 
    }); 
}; 


// ================================My Backend============================= 

// This is the function that will receive POST request to /api/items 
exports.create = function(req, res) { 
    console.log(req.body); // req.body is just an empty object. ==> {} 

    // apparently, I found all the data to be in req._readableState.buffer[0] 
    // in the form of a buffer 
    var buffer = req._readableState.buffer[0]; 

    // trying to console.log the buffer.toString, resulting in something similar to this 
    // { name: "Test", image: Object } 
    console.log(buffer.toString()); 

    return res.send(200); 
}; 

Так что мой бэкенд получил formObj со всеми его свойствами и значениями, однако, фактические данные файла, будь то в виде буфера или base64, или что-то еще, никогда не получаются.

Интересно, почему. Это мой первый опыт работы с загрузкой файлов, поэтому я не понимаю эту концепцию.

Пожалуйста, мне точку в правильном направлении

ответ

0

Если вы используете Последнюю версию Экспресса, вы бы заметили, что

app.use(express.multipart()); больше не поставляются с экспрессом.

Таким образом, следующие изменения конфигурации. в express.js

var multer = require('multer'); 

app.use(multer({ dest: './uploads/'})); 

Вы нашли бы, что после выполнения этого вы найдете данные и файл, в req.body req.file соответственно.

Надеюсь, это поможет