2016-02-13 20 views
1

我試圖構建一個Excel文件上傳器並解析路徑中的數據以存儲它,但數據在從通過$ http服務路由發送的FormData轉換時出現數據丟失。我不知道該怎麼做!如果您有任何這方面的經驗,請幫助!AngularJS將數據從multipartForm指令丟失到路由

HTML視圖:

<form ng-controller="myCtrl"> 
     <div class="form-group"> 
      <label for="name">Name</label> 
      <input type="text" class="form-control" ng-model="myFile.name"> 
     </div> 
     <div class="form-group" > 
      <input type="file" file-model="myFile.file"/> 
     </div> 
     <button ng-click="Submit()">upload me</button> 
    </form> 

控制器視圖:

myApp.controller('myCtrl', ['$scope', 'multipartForm', function($scope, multipartForm){ 
    $scope.myFile = {}; 
    $scope.Submit = function(){ 
     var uploadUrl = '/upload'; 
     multipartForm.post(uploadUrl, $scope.myFile); 
    } 
}]); 

服務觀:

myApp.service('multipartForm', ['$http', function($http){ 
    this.post = function(uploadUrl, data){ 
     var fd = new FormData(); 
     for(var key in data) { 
      fd.append(key, data[key]); 
     } 
     $http.post(uploadUrl, fd, { 
      transformRequest: angular.indentity, 
      headers: { 'Content-Type': undefined } 
     }); 
    } 
}]) 

指令查看:

myApp.directive('fileModel', ['$parse', function($parse){ 
    return { 
     restrict: 'A', 
     link: function(scope, element, attrs){ 
      var model = $parse(attrs.fileModel); 
      var modelSetter = model.assign; 

      element.bind('change', function(){ 
       scope.$apply(function(){ 
        modelSetter(scope, element[0].files[0]); 
       }) 
      }) 
     } 
    } 
}]) 

這是數據不經過的路由視圖。

module.exports = function (app) { 
    app 
    .post('/upload', function(req, res){ 
     console.log(req.body); 
     console.log(req.files); 
    }); 
} 

Server.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 
var upload = multer({ dest: './uploads/'}); 
var app = express(); 





// if using body-parser 
app.use(bodyParser.json()); 
app.use(express.static(__dirname + '/client')); 
app.use('/node_modules', express.static(__dirname + '/node_modules')); 
// if mongoose, require mongoose 
//require('./server/config/mongoose.js'); 

//routes 
require('./server/config/routes.js')(app); 

app.listen(8000, function() { 
    console.log('listening on port 8000'); 
}) 

回答

1

簡單的方法是使用NG文件上傳。它是使用HTML5和FileAPI polyfill進行文件上傳的最流行的AngularJS指令,適用於不受支持的瀏覽器。

Docs

Demo

+0

謝謝你的提示!我想我只是讓自己變得比我應該更加努力。 – EggSix