2016-11-29 2 views
1

Was ist der richtige Weg, Dateien zu senden und abzurufen und in einem Ordner zu speichern?Richtiges Senden und Abrufen von Dateien Spring

ich einen Beitrag von Postman mit Körperform-Daten zu senden: 2 Schlüssel ‚upload‘ jeweils mit einem Reißverschluss.

Dieser Code wird nur ein Reißverschluss und speichern, die zweite Reißverschluss zu ignorieren.

Wie kann ich es implementieren beiden Dateien speichern? Auch. Soll ich 2 Dateien in einem Schlüssel senden? oder jede Datei in getrennten Schlüsseln?

@RequestMapping(value = "/api/uploadFile", method = RequestMethod.POST) 
@ResponseBody 
public ResponseEntity<?> uploadFile(
     @RequestParam("uploadfile") MultipartFile uploadfile) { 

    try { 


      // Get the filename and build the local file path (be sure that the 
      // application have write permissions on such directory) 

      String filename = uploadfile.getOriginalFilename(); 
      String directory = "C://Develop//files"; 
      String filepath = Paths.get(directory, filename).toString(); 

      filenameZip = "c:/Develop/files/"+filename; 
      directoryZip = "c:/Develop/files"; 

      // Save the file locally 
      BufferedOutputStream stream = 
        new BufferedOutputStream(new FileOutputStream(new File(filepath))); 
      stream.write(uploadfile.getBytes()); 
      stream.close(); 



    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     return new ResponseEntity<>(HttpStatus.BAD_REQUEST); 
    } 
     // unzip(filenameZip, directoryZip); 
     return new ResponseEntity<>(HttpStatus.OK); 
} // method uploadFile 

Postman Log:

var data = new FormData(); 
data.append("uploadfile", "pasta1.zip"); 
data.append("uploadfile", "pasta2.zip"); 

var xhr = new XMLHttpRequest(); 
xhr.withCredentials = true; 

xhr.addEventListener("readystatechange", function() { 
    if (this.readyState === 4) { 
console.log(this.responseText); 
    } 
}); 

xhr.open("POST", "http://localhost:8080/api/uploadFile"); 
xhr.setRequestHeader("authorization", "Basic b3BlcmF0aW9uczpvcGVyYXRpb25z"); 
xhr.setRequestHeader("cache-control", "no-cache"); 
xhr.setRequestHeader("postman-token", "e7b6fcae-4a49-de34-ba7c-efd412fb244a"); 

xhr.send(data); 

Antwort

3

Sie Ihre Service-Array mehrt Datei akzeptieren machen, dann können Sie so viel sie senden, wie Sie von Dateien wollen es hochladen und hier ist ein exmaple

@RequestMapping(value="/multipleSave", method=RequestMethod.POST) 
    public @ResponseBody String multipleSave(@RequestParam("file") MultipartFile[] files){ 
     String fileName = null; 
     String msg = ""; 
     if (files != null && files.length >0) { 
      for(int i =0 ;i< files.length; i++){ 
       try { 
        fileName = files[i].getOriginalFilename(); 
        byte[] bytes = files[i].getBytes(); 
        BufferedOutputStream buffStream = 
          new BufferedOutputStream(new FileOutputStream(new File("F:/cp/" + fileName))); 
        buffStream.write(bytes); 
        buffStream.close(); 
        msg += "You have successfully uploaded " + fileName +"<br/>"; 
       } catch (Exception e) { 
        return "You failed to upload " + fileName + ": " + e.getMessage() +"<br/>"; 
       } 
      } 
      return msg; 
     } else { 
      return "Unable to upload. File is empty."; 
     } 
    } 
} 

und für den Schlüsselteil können Sie alle Dateien mit dem gleichen Schlüssel senden

Verwandte Themen