2017-10-17 4 views
0

Je veux télécharger un fichier en utilisant ng-file-upload, et envoyer en même temps une liste de valeurs (type Long).
Je l'ai fait:
côté clientng-file-upload: envoyer la liste en tant que données supplémentaires

vm.uploadFiles = function(file, errFiles) { 
    $scope.f = file; 
    $scope.errFile = errFiles && errFiles[0]; 
    if (file) { 
     file.upload = Upload.upload({ 
      url: '/api/sendMailCra', 
      fields: {'collaborateursId':vm.collaborateursId}, 
      file: file 
     }); 

     file.upload.then(function (response) { 
      $timeout(function() { 
       file.result = response.data; 
      }); 
     }, function (response) { 
      vm.clear(); 
     }, function (evt) { 
     }); 
    } 
} 

côté serveur

@RequestMapping(value = "/sendMailCra", 
     method = RequestMethod.POST, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
public void upload(@RequestParam("collaborateursId") List<Long> collaborateursId, @RequestParam("file") MultipartFile file) throws IOException { 
    log.debug("REST send mail to Collaborateurs : {}"+collaborateursId); 
} 

Je reçois un

500 Erreur interne du serveur

sans journal d'erreurs côté serveur.

Comment puis-je transmettre ma liste du client au serveur?
Merci

Répondre

0

En utilisant form data nous pouvons envoyer des fichiers et des données de contrôleur angulaire au serveur.

vm.uploadFiles = function(file, errFiles) { 
    $scope.f = file; 
    $scope.errFile = errFiles && errFiles[0]; 
    var data = new FormData(); 
    data.append("uploadFile ", file); 
    data.append("collaborateursId ", vm.collaborateursId); 
    if (file) { 
     file.upload = Upload.upload({ 
      url: '/api/sendMailCra', 
      data:data, 
      headers: {'Content-Type': undefined} 
     }); 

     file.upload.then(function (response) { 
      $timeout(function() { 
       file.result = response.data; 
      }); 
     }, function (response) { 
      vm.clear(); 
     }, function (evt) { 
     }); 
    } 
} 

Dans Controller utilisant mutipartRequest

@RequestMapping(value = "/sendMailCra", 
     method = RequestMethod.POST, 
     ) 
@Timed 
public void upload(HttpServletRequest request, HttpServletResponse response) throws IOException { 
     String collaborateursId= request.getParameter("collaborateursId"); 

    next converted the request to multipartRequest for get th file 
    MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; 
    Iterator<String> fileNames = mRequest.getFileNames(); 
      while (fileNames.hasNext()) { 
//    HashMap<String, String> hashMap = new HashMap<String, String>(); 
       MultipartFile file = mRequest.getFile(fileNames.next()); 

       store file into your prefered location.... 
       } 

     log.debug("REST send mail to Collaborateurs : {}"+collaborateursId); 
} 

Nous pouvons définir la limite de taille de fichier au printemps configurationFile link

<beans:bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

     <!-- setting maximum upload size --> 
     <beans:property name="maxUploadSize" value="100000" /> 

    </beans:bean> 

voir ce link

+0

merci. Côté serveur, je ne vois pas la propriété "collaborateursId" dans l'objet de requête (de type StandardMultiPartHttpServletRequest à l'exécution). J'ai seulement des propriétés: multipartParameterNames size = 0 et multipartFiles size = 0. – thomas

+0

@RequestMapping La valeur et la méthode de passage d'annotation uniquement ne produisent pas de valeur .et consultez ce lien pour obtenir plus d'informations: https: //stackoverflow.com/questions/34991498/how-to-send-multiple-files-along- avec-la-forme-données-en-angulairejs/46708678 # 46708678 – Raju