2017-02-11 1 views
0

Wir implementieren Web-App und es gibt ein Problem mit Download-Datei-Link. Der Code des Controllers ist:Wie kann ich Kunden mitteilen, welchen Namen die dows-Datei beim Herunterladen mit Spring Boot hat?

@RequestMapping(value = "/file" , method = RequestMethod.GET, 
produces = "application/jar") 
public ResponseEntity<FileSystemResource> getFile() { 
    FileSystemResource resource = new FileSystemResource(new File(PATH_TO_FILE)); 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.add("Content-Disposition", "attachment; filename=" + FILE_NAME); 
    responseHeaders.add("Content-Type", "application/jar"); 
    ResponseEntity<FileSystemResource> responseEntity = new ResponseEntity<>(resource, responseHeaders, HttpStatus.OK); 
    return responseEntity; 
} 

Problem ist, dass es auch von Browser herunterlädt, nicht aber zum Beispiel von wget.

wenn ich versuche,

wget localhost:8080/file 

ich es herunterladen, aber nicht als Datei.jar (was FILE_NAME ist), aber nur eine Datei ohne Erweiterung.

Gibt es irgendwelche Lösungen?

UPD: Ich habe auch versucht, die Anfrage zu file.jar zu ändern. Aber aus irgendeinem Grund schoss diese Anfrage nicht. Auch habe ich versucht, einen regulären Ausdruck zu machen (ich erinnere mich nicht gut, so etwas wie dieses)

{filename:[a-zA-Z0-9]+}{extension:\\.[a-z]+} 

Aber es nur cought Anfragen wie AAA.BBB, fsdf.sdkfjsdkf (ich meine einige zufällige), aber nicht ein Datei.jar . Scheint es so, als gäbe es spezielle Anfragen in Spring Boot?

Dennoch, wie ein solches Problem zu lösen?

Danke

Antwort

0

Mein Vorschlag ist Ihre Lösung zu modifizieren, so zu sein:

@RequestMapping(value = "/download/{fileName}" , method = RequestMethod.GET, 
produces = "application/jar") 
public ResponseEntity<FileSystemResource> getFile(@PathVariable("fileName") String fileName) { 
    File pathToFile = findPathToFile(fileName); 
    FileSystemResource resource = new FileSystemResource(new File(pathToFile)); 

    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.add("Content-Disposition", "attachment; filename=" + fileName); 
    responseHeaders.add("Content-Type", "application/jar"); 
    ResponseEntity<FileSystemResource> responseEntity = new ResponseEntity<>(resource, responseHeaders, HttpStatus.OK); 
    return responseEntity; 
} 

Dann können Sie mit wget nennen:

wget localhost:8080/download/file.jar 

Eine weitere Option, wenn Sie wollen Kompromiss Mit Ihrem wget-Befehl können Sie -O-Flag verwenden:

wget -O file.jar localhost:8080/file 
+0

Hat nicht funktioniert :( Ich habe es auch versucht. Das Problem ist, dass "/download/file.jar" aus irgendeinem Grund nicht durch den zugewiesenen Wert "/ download/{fileName}" ersetzt wird. – utkillr

+0

Das Lustigste ist, dass die Anfrage nach "file.jara" abgefangen wird, aber kein "file.jar" Scheint, als gäbe es eine Art spezielle Anfrageabbildung – utkillr

+0

Kannst du versuchen, diesen Ausdruck zu verwenden value = "/download/{fileName:.+}" – algojava

Verwandte Themen