Ich bin ein Programmierer für Anfänger und helfe bei der Implementierung des Hochladens einer Textdatei über rest-api java.
Ich habe bereits die einfachste Aktion implementiert - eine Datei vom Server entladen, hier ist mein Code:
@GetMapping(value = "/file/{filename:.+}")
public ResponseEntity<Resource> unloadFile(@PathVariable String filename) {
Resource file = storageService.loadAsResource(filename);
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + file.getFilename() + "\"").body(file);
}
Ich kann das Entladen der Datei testen, indem ich einfach dem Link folge! Ich kann den Upload nicht testen. Ich finde es schwierig, Tests zu schreiben. Bitte sagen Sie mir, ob ich einen funktionierenden Code habe und vielleicht gibt es eine bessere Möglichkeit zum Hochladen. Mein Code-Upload:
@PostMapping(value = "/file")
public ResponseEntity<MultipartFile> uploadFile(MultipartFile file) {
storageService.store(file);
return ResponseEntity.ok().body(file);
}
Ich danke dir sehr!
2 Antworten
Um die Datei / Dateien mit der Spring-Boot-Anwendung hochzuladen, verwenden wir dieselbe Methode wie für Servlet-Container. In Ihrem Controller
@PostMapping("/uploadFile")
public ResponseEntity<Object> uploadFile(@RequestParam("file") MultipartFile file) {
String fileName = yourStorageService.storeFile(file);
String = ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/downloadFile/")
.path(fileName)
.toUriString();
//You can even generate download links.
return new ResponseEntity<Object>(HttpStatus.Ok, "Uploaded", fileDownloadUri);
}
So laden Sie die Dateien herunter:
@GetMapping("/downloadFile/{fileName}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName, HttpServletRequest request) {
// Load file as Resource from DB or local
Resource resource = fileStorageService.loadFileAsResource(fileName);
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType(contentType))
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
.body(resource);
Für den Endpunkt @PostMapping (value = "/ file") ist es am besten, einen Erfolgs- / Fehlerstatus zurückzugeben, anstatt die Datei zurückzugeben, wenn die Datei größer ist. Die Rückkehr dauert einige Zeit.
Besser, um den Erfolgszustand zurückzugeben. 200 ok.
Neue Fragen
java
Java ist eine Programmiersprache auf hoher Ebene. Verwenden Sie dieses Tag, wenn Sie Probleme haben, die Sprache selbst zu verwenden oder zu verstehen. Dieses Tag wird selten alleine verwendet und wird am häufigsten in Verbindung mit [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] und [maven] verwendet.