загрузка файла с помощью angularjs и spring

0

У меня есть тип ввода = "файл" следующим образом:

<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());

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

Редактировать:

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

Теги:
spring-boot
spring

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню