2015-11-24 4 views
1

Я использую ng-file-upload в своем проекте. Все работает нормально, и я использую его, как показано ниже.Угловая загрузка файла с данными тела

<div class="col-md-4"> 
    <input type="file" ngf-select="" 
    ngf-change="validateFileInput($files)" ngf-multiple="false" 
    ngf-allow-dir="false" ng-model="contactGroupForm.files" 
    id="fileUpload" name="file" required="File must be selected"> 
</div> 

Угловая контроллер,

var paramsData = {'name' : $scope.form.groupName,'description': $scope.form.groupDesc }; 
Upload.upload({ 
      url: restUrl, 
      method: "POST", 
      timeout: 200000, 
      params : paramsData, 
      file : $scope.file 
     }).then(success, error); 

Весна контроллер отдых,

@RequestMapping(value = "/rest/save", method = RequestMethod.POST) 
    public StatusDto saveContactGroup(@RequestParam("file") MultipartFile file, 
      @RequestParam("contactGroupId") String contactGroupId, 
      @RequestParam("name") String name, 
      @RequestParam(value="description", required=false) String description) { 

Теперь мы планируем иметь больший вклад в формах. Итак, я хотел бы отправить все через @RequestBody в контроллер весеннего останова.

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

$scope.formData = {     
       'name': $scope.contactGroupForm.groupName, 
       'desc': $scope.contactGroupForm.groupDesc, 
       'file': $scope.file 
      }; 

Upload.upload({ 
       url: restUrl, 
       method: "POST", 
       timeout: 200000, 
       file : data 
      }).then(success, error); 

Спринг контроллер,

@RequestMapping(value = "/rest/contact/saveContactGroup", method = RequestMethod.POST) 
    public StatusDto saveContactGroup(@RequestBody ContactForm) { 

Есть в любом случае, мы можем обернуть файл и данные формы в форму для отправки в контроллер Spring отдыха?

Благодаря

+0

Вам не нужно '@ RequestBody', но вам все еще нужно' @RequestParam («Файл») MultipartFile file' , – zeroflagL

+0

Как я могу отправить другие параметры формы? – user1578872

+0

Я не понимаю ваш вопрос. Вы делаете это как в примере 1, но с кодом Spring из примера 2 и изменениями из моего комментария. – zeroflagL

ответ

0

От моего проекта

Upload.upload({ 
      url: 'rest/upload', 
      data: {file: files, 'objectId':$stateParams.objectId} 
     }).then(function (resp) { 
      //console.log(resp); 
      $scope.loadDocList(); 
     }, function (resp) { 
      // console.log(resp); 
     }, function (evt) { 
      $scope.progress = Math.min(100, parseInt(100.0 * evt.loaded/evt.total)); 
      //console.log($scope.progress); 
      if($scope.progress==100)$scope.progress = 0; //in order to hide progress bar 
     }); 

Спринг контроллер:

@RequestMapping(value={"/upload"}, method = RequestMethod.POST) 
    @Consumes("multipart/form-data;charset=UTF-8") 
    @ResponseBody 
    public Document upload(MultipartHttpServletRequest request /*@RequestBody MultipartFile file*/){ 

     Document resultHolder = new Document(); 
     try { 
      String objectId = request.getParameter("objectId"); 
      Collection<MultipartFile> files = request.getFileMap().values(); 
      Iterator it = files.iterator(); 
      while(it.hasNext()) { 
       MultipartFile file = (MultipartFile) it.next(); 
       System.out.println(new String(file.getOriginalFilename().getBytes("iso-8859-1"),"UTF-8")); 
       docService.upload(file, objectId); 
      } 
      resultHolder.put("result", "success"); 
     }catch(Exception ex){ 
      resultHolder.put("result", "fail"); 
      ex.printStackTrace(); 
     } 
     return resultHolder; 
    } 

Заменить мой Documnt к вашему StatusDto. Ключевой момент: использование MultipartHttpServletRequest

Важно - если вы отправляете некоторые UTF-8 Params вы должны использовать
Строка парам = новый String (request.getParameter ("парам") GetBytes ("ISO-8859-1. ")," UTF-8"); То же самое для request.getOriginalFilename - для английских букв это нормально, но если имя файла содержит UTF-8 символов использовать

String filename = new String(file.getOriginalFilename().getBytes("iso-8859-1"),"UTF-8")); 
Смежные вопросы