2017-10-17 2 views
0

Ich möchte eine Datei mit ng-Datei-Upload hochladen und gleichzeitig eine Werteliste (Typ Long) senden.
Ich habe getan, dass:
Client-Seiteng-Datei-Upload: Liste als zusätzliche Daten senden

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

Server-Seite

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

Ich bin ein Fehler

500 Internal Server bekommen

ohne Fehlerprotokoll auf der Serverseite.

Wie kann ich meine Liste von Client zu Server übergeben?
Dank

Antwort

0

von form data wir die Verwendung von Dateien und Daten von Winkel-Controller an den Server senden kann.

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

In -Controller mit 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); 
} 

Wir können Dateigrößenbegrenzung im Frühjahr configuration link

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

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

    </beans:bean> 

sehen diese link

gesetzt
+0

danke. Auf der Serverseite, sehe ich nicht die Eigenschaft "collaboralsursId" im Anfrageobjekt (vom Typ StandardMultiPartHttpServletRequest zur Laufzeit). Ich habe nur Eigenschaften: multipartParameterNames size = 0 und multipartFiles size = 0. – thomas

+0

@RequestMapping Annotation Pass nur Wert und Methode nicht übergeben produziert Wert. Und siehe diesen Link erhalten Sie weitere Informationen: https: //stackoverflow.com/questions/34991498/how-to-send-multiple-files-along- mit-der-Form-Daten-in-angularjs/46708678 # 46708678 – Raju

Verwandte Themen