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!

0
Дмитрий 17 Aug. 2020 im 13:05

2 Antworten

Beste Antwort

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);
0
Amit Mishra 17 Aug. 2020 im 10:22

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.

0
Harshavardhan reddy. 17 Aug. 2020 im 10:24