AngularJS在Http POST中没有设置正确的Content-Type

所以我想上传一个mp3文件到一个NodeJS服务器。 我正确地看到文件数据和一切,所以我知道我的模型是正确的,但每次我发送http后,我得到一个无效的JSON错误。 这是令人困惑的,因为我已经将content-type设置为undefinded和multipart / form-data,无论何时我查看控制台,仍然可以看到请求头中的content-type被设置为application / json。 这里是我用来做上传的代码:

模板:

<form> <div class="form-group"> <label name="type-label" for="type">Type</label> <select name="type" ng-model="data.type"> <option value="music">Music</option> <option value="image">Image</option> <option value="video">Video</option> </select> </div> <div class="form-group"> <label name="name-label" for="name">Name</label> <input type="text" name="name" ng-model="data.name" /> </div> <div class="form-group"> <label name="description-label" for="description">Description</label> <input type="text" name="description" ng-model="data.description" /> </div> <div> <input type="file" upload-file="file"/> </div> <div class="form-group"> <div class="btn btn-primary" ng-click="upload()">Select File</div> </div> </form> 

服务:

 angular.module('app').factory("UploadService", ['$http', function($http) { return { upload: function (file, data) { var fd = new FormData(); fd.append('file', file); return $http({ method: 'POST', url: '/upload/' + data.type, data: fd, transformRequest: angular.identity, headers: { 'Content-Type': 'multipart/form-data' } }) .success(function(){ //Do something. }) .error(function(){ //Do something. }); } } } ]); 

控制器:

 angular.module('app').controller('UploadController', ['$scope', 'UploadService', function($scope, UploadService) { $scope.data = {}; $scope.upload = function() { console.log($scope.file); UploadService.upload($scope.file, $scope.data); }; } ]); 

最后,我甚至写了一个小帮手configuration来尝试强制httppost的默认内容types。

帮手:

 angular.module('app').config(function($httpProvider) { $httpProvider.defaults.headers.post = { 'Content-Type' : 'multipart/form-data' }; }); 

在这一点上,我相当坚持要做什么,所以任何build议/帮助将不胜感激。 或者如果有比这更简单的方法,一般上传MP3的任何提示。 谢谢!

尝试这个

 $httpProvider.defaults.headers.post['Content-Type'] = 'multipart/form-data; charset=utf-8'; 
 You should set your content-type in your service like this- angular.module('app').factory("UploadService", ['$http', function($http) { return { upload: function (file, data) { var fd = new FormData(); fd.append('file', file); return $http({ method: 'POST', url: '/upload/' + data.type, data: fd, transformRequest: angular.identity, headers: { 'Content-Type': undefined } }) .success(function(){ //Do something. }) .error(function(){ //Do something. }); } } } ]);