2016-04-20 2 views
0

У меня есть входной тип = «файл» в следующей редакции:загрузки файлов с помощью angularjs и весной

<input id="identityDocument" name="identityDocument" ng-model="candidature.identityDocument" 
       ui-jq="filestyle" type="file" class="filestyle input-lg" 
       file-model="uploadIdentityDocument" 
       ui-options="{ 
        buttonText: '{{'ACTIONS.UPLOAD' | translate}}', 
        iconName: 'fa fa-inbox' 
        }" 
       accept="image/*" valid-file required> 

, чтобы этот входной файл, известный в области видимости Я использую эту директиву:

.directive('fileModel',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]); 
     }); 
     }); 
    } 
    }; 
}); 

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

let file = $scope.uploadIdentityDocument; 
     let fd = new FormData(); 
     fd.append('file', file); 
     $http.post('http://localhost:8080/fileUpload', fd, { 
      transformRequest: angular.identity, 
      headers: {'Content-Type': undefined} 
      }) 
      .success(function(){ 
      }) 
      .error(function(){ 
      }); 

на стороне сервера этой моей службы отдыха:

@RestController 
    public class UploadService { 
     @Autowired 
     IUploadMetier uploadMetier; 

     @RequestMapping(value="/fileUpload", method = RequestMethod.POST) 
     public ResponseEntity<String> UploadFile(MultipartHttpServletRequest request) { 
      String response = uploadMetier.uploadFile(request); 
      if(response.equals("false")){ 
       return new ResponseEntity<>("There was an error uploading this file: " + response + " to the server :-(", HttpStatus.INTERNAL_SERVER_ERROR); 
      }else{ 
       return new ResponseEntity<>("The file: " + response + " has uploaded successfully :-)", HttpStatus.OK); 
      } 
     } 
} 

и это функция, которая загружает файл:

public String uploadFile(MultipartHttpServletRequest request) { 
     Iterator<String> itr=request.getFileNames(); 
     MultipartFile file=request.getFile(itr.next()); 
     String fileName=file.getOriginalFilename(); 
     File dir = new File("\\MyPath"); 
     if (dir.isDirectory()) 
     { 
      File serverFile = new File(dir,fileName); 
      BufferedOutputStream stream = null; 
      try { 
       stream = new BufferedOutputStream(
         new FileOutputStream(serverFile)); 
       stream.write(file.getBytes()); 
       stream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return "false"; 
      } 
     }else { 
      return "false"; 
     } 
     return fileName; 
    } 

, но затем я получаю сообщение об ошибке:

java.util.NoSuchElementException: null 
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:713) ~[na:1.8.0_73] 
    at java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:734) ~[na:1.8.0_73] 
    at org.capvalue.fme.metier.mpl.UploadMetierImpl.uploadFile(UploadMetierImpl.java:19) ~[classes/:na] 
    at org.capvalue.fme.web.rest.UploadService.UploadFile(UploadService.java:23) 

линия UploadMetierImpl.java:19 относится к: MultipartFile file=request.getFile(itr.next());

как я могу это решить?

Edit:

Я просто заметил, что когда я console.log $scope.uploadIdentityDocument я неопределенный, и я не знаю, почему я получаю это!

ответ

0

Ошибка в том, что $ scope.identityDocUpload не был определен, то решение было удалить, что директива fileModel я использовал и я добавил это к моему входу:

onchange="angular.element(this).scope().setFile(this,'identityDocumentUpload')" 

setFile функции:

$scope.setFile = function(element, name) { 
     $parse(name).assign($scope, element.files[0]); 
}