简体   繁体   English

如何在angularjs中的服务器(Django)上上传Excel文件?

[英]How to upload excel file on server(django) in angularjs?

I want to upload file on server, but in Utility Service there is variable files in for loop is undefined during debug, please check directive is correct or not. 我想在服务器上上传文件,但是在Utility Service中,调试期间未定义for循环中的变量文件 ,请检查指令是否正确。

HTML 的HTML

 <input type="file" accept=".xlsx" file-model/>
 <button ng-click="upload()">upload me</button>

fileModel directive fileModel指令

app.directive('fileModel', function () {
    return {
        restrict: 'A',
        transclude: true,
        link: function($scope, $element) {
          var fileInput = $element.find('input[type="file"]');
          fileInput.bind('change', function(e) {               
            $scope.notReady = e.target.files.length == 0;
            $scope.files = [];
            for (var i in e.target.files) {
              if (typeof e.target.files[i] == 'object')       
                  $scope.files.push(e.target.files[i]);
            }
          });
        }
    };
  });

Controller 控制者

 $scope.upload = function() {        
      var uploadUrl =  'someurl';
      UtilityService.upload($scope.files, $scope.user, uploadUrl);
  };

Service 服务

function UtilityService($http, $rootScope) {

      var service = {};
      service.upload=upload;

      function upload(files, user, uploadUrl) {
      var formData = new FormData();
      for (var i in files) {
        formData.append('file_' + i, files[i]);
      }

      formData.append("UserId", user.id);
      formData.append("UserRole", user.roles);

      $http({
          method: 'POST',
          url: config.server +uploadUrl,
          enctype: "multipart/form-data",
          data: formData,
          headers: {
            'Content-Type': undefined,
          },
          transformRequest: angular.identity
        })
        .success(function(data, status, headers, config) {
          service.data = data;

        });
    }
    return service;
  }

Well, I guess the issue is with this line - var fileInput = $element.find('input[type="file"]'); 好吧,我想问题出在这行-var fileInput = $ element.find('input [type =“ file”]');

Not sure why you need to find anything. 不知道为什么您需要找到任何东西。 $element is the actual file input element here. $ element是此处的实际文件输入元素。

Modified directive - try this 修改指令-试试这个

app.directive('fileModel', function () {
    return {
        restrict: 'A',
        transclude: true,
        link: function($scope, $element) {
          var fileInput = $element;
          fileInput.bind('change', function(e) {               
            $scope.notReady = e.target.files.length == 0;
            $scope.files = [];
            for (var i in e.target.files) {
              if (typeof e.target.files[i] == 'object')       
                  $scope.files.push(e.target.files[i]);
            }
          });
        }
    };
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM