2017-12-18 2 views
0

Wir haben eine HTTP-Anfrage, die, wenn auf Server behandelt wird eine Antwort ca. 3 GB in der Größe erstellen, diese Daten ist eine Zusammenfassung von 6 Abfragen an die Datenbank, wie können wir diese Daten als einzelne Antworten senden von 6 Abfragen als als eine Aggregation.Wie streamen große HTTP-Antwort im Frühjahr

+0

Sie können nur eine einzige Antwort von einer einzigen Anfrage zurück. –

Antwort

0

Ich tat dies:

@GetMapping("/{fileName:[0-9A-z]+}") 
    @ResponseBody 
    public ResponseEntity<InputStreamResource> get_File(@PathVariable String fileName) throws IOException { 
     Files dbFile = fileRepository.findByUUID(fileName); 

     if (dbFile.equals(null)) 
      return new ResponseEntity<>(HttpStatus.NOT_FOUND); 

     String filename = dbFile.getFileName(); 
     Resource file = storageService.loadAsResource(dbFile.getFileName()); 


     long len = 0; 
     try { 
      len = file.contentLength(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     MediaType mediaType = MediaType.valueOf(FileTypeMap.getDefaultFileTypeMap().getContentType(file.getFile())); 

     if (filename.toLowerCase().endsWith("mp4") || filename.toLowerCase().endsWith("mp3") || 
       filename.toLowerCase().endsWith("3gp") || filename.toLowerCase().endsWith("mpeg") || 
       filename.toLowerCase().endsWith("mpeg4")) 
      mediaType = MediaType.parseMediaType("application/octet-stream"); 


     InputStreamResource resource = new InputStreamResource(new FileInputStream(file.getFile())); 

     return ResponseEntity.ok() 
       .contentType(mediaType) 
       .contentLength(len) 
       .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"") 
       .body(resource); 
    }