如何将angularjs中的multipart文件传递给rest服务?

时间:2015-10-16 10:33:01

标签: javascript angularjs web-services rest multipartform-data

提供错误必需MultipartFile参数'file'不存在...客户端发送的请求在语法上不正确

<html>

<head>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
</head>

<body ng-app="myApp">

  <div ng-controller="myCtrl">
    <input type="file" file-model="myFile" />
    <button ng-click="uploadFile()">upload me</button>
  </div>

  <script>
    var myApp = angular.module('myApp', []);

    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]);
              });
            });
          }
        };
      }
    ]);

    myApp.service('fileUpload', ['$http',
      function($http) {
        this.uploadFileToUrl = function(file, uploadUrl) {
          var fd = new FormData();
          fd.append('file', file);

          $http.post(uploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {
              'Content-Type': undefined
            }
          })

          .success(function() {})

          .error(function() {});
        }
      }
    ]);

    myApp.controller('myCtrl', ['$scope', 'fileUpload',
      function($scope, fileUpload) {
        $scope.uploadFile = function() {
          var file = $scope.myFile;

          console.log('file is ');
          console.dir(file);

          var uploadUrl = "/fileUpload/save";
          fileUpload.uploadFileToUrl(file, uploadUrl);
        };
      }
    ]);
  </script>

</body>

</html>

我的网络服务

@Controller
@RequestMapping(value = "/fileUpload")
public class FileUploadController {

    @RequestMapping(value = "/save", method = RequestMethod.POST)
     public @ResponseBody String singleSave(@RequestParam("file") MultipartFile file ){
            String fileName = null;
            String filePath=null;

            if (!file.isEmpty()) {
                try {
                     fileName = file.getOriginalFilename();
                    filePath="C:/cp/" + fileName;

                    byte[] bytes = file.getBytes();
                    BufferedOutputStream buffStream = 
                            new BufferedOutputStream(new FileOutputStream(new File("C:/cp/" + fileName)));
                    buffStream.write(bytes);
                    buffStream.close();

                    ExcelConverter x= new ExcelConverter();
                    x.convertFile(filePath);
                    return "You have successfully uploaded " + fileName;


                } catch (Exception e) {
                    e.printStackTrace();
                    return "You failed to upload " + fileName + ": " + e.getMessage();
                }
            } else {
                return "Unable to upload. File is empty.";
            }
        }

}

这是网络服务..但它无法选择文件

0 个答案:

没有答案