2015-01-26 5 views
0

Я пытаюсь загрузить файл с контроллером AngularJS и Spring Boot. У меня есть 2 проблемы:Не удается загрузить файл с помощью Angular and Spring Boot

1) Когда я использую HTML-форму 'submit' , я получаю превышен размер, хотя я установил максимальный размер файла на 128M. Код выглядит так:

public class AppConfig { 
    @Bean 
    public MultipartConfigElement multipartConfigElement() { 
     factory.setMaxFileSize("128MB"); 
     factory.setMaxRequestSize("128MB"); 
     return factory.createMultipartConfig(); 
    } 
} 

Похоже, что Spring игнорирует эти настройки.

2) Когда я пытаюсь загрузить файл, я получаю ошибку:

org.springframework.web.multipart.MultipartException: The current request is not a multipart request 

Угловой контроллер выглядит следующим образом:

$scope.uploadFile=function(){ 
    var formData=new FormData(); 
    formData.append("file",file.files[0]); 

    $http.post('/content-files/upload /', file.files[0], { 

     transformRequest: function(data, headersGetterFunction) { 
       return data; // do nothing! FormData is very good! 
      }, 
     headers: {'Content-Type': undefined } 

    }) 
    .success(function(){ 
     console.log('Post Succeded !'); 
    }) 
    .error(function(){ 
     console.log('Post Failed .'); 
    }); 
} 

и контроллер Spring выглядит следующим образом:

@RequestMapping(value = "/content-files/upload/", method = RequestMethod.POST )   
public @ResponseBody String handleFileUpload( @RequestParam("file") MultipartFile file) { 
    System.out.println("BrandController.uploadMultipart()"); 

    String name=file.getName(); 
    if (!file.isEmpty()) { 
     try { 
      byte[] bytes = file.getBytes(); 
      BufferedOutputStream stream = 
          new BufferedOutputStream(new FileOutputStream(new File(name))); 
      stream.write(bytes); 
      stream.close(); 
      return "You successfully uploaded " + name + "!"; 
     } catch (Exception e) { 
      return "You failed to upload " + name + " => " + e.getMessage(); 
     } 
    } else { 
     return "You failed to upload " + name + " because the file was empty."; 
    } 
} 

Я попытался изменить контроллер JS для:

$http.post('/content-files/upload /', file.files[0], {   
    headers: { 'Content-Type': undefined }, 
    transformRequest: angular.identity 
}) 

, но я получаю ту же ошибку, что и выше. При попытке изменения контроллера JS для:

headers: { 'Content-Type': 'multipart/form-data' }, 
      transformRequest: angular.identity 

Я получаю ошибку the request was rejected because no multipart boundary was found.

Кажется, что я пробовал все комбинации с параметрами и до сих пор ничего не работал. Что мне нужно сделать, чтобы загрузить этот файл?

+0

попробуйте использовать 'jQuery Fileupload' – EpicPandaForce

ответ

2

Try с этим:

var formData = new FormData(); 
formData.append('file',file.files[0]); 

$http.post('/content-files/upload /', formData, {   
    headers: { 'Content-Type': undefined }, 
    transformRequest: angular.identity 
}) 
+1

Вообще-то избегайте ответов только на код. Подумайте о добавлении описания, которое поможет объяснить ваш код. благодаря – MickyD

0

На основе MultipartAutoConfiguration кода, способ увеличить лимит на размер загрузки (по умолчанию макс составляет 1 МБ) с Spring загрузочная следующие свойства:

multipart.maxFileSize=129Mb 
multipart.maxRequestSize=129Mb 

Что касается многозадачных загрузок jquery, то, как вы это делаете, не отображается правильно, есть и другие хорошие ссылки, которые вы можете проверить, я видел много в Stackoverflow.

Смежные вопросы