2017-12-18 5 views
0

サーバーで処理すると約3GBのサイズのレスポンスが作成されます。このデータはデータベースへの6つのクエリの集計です。このデータを個々のレスポンスとしてどのように送信できますか6つのクエリのうちの1つを集計として使用します。大きなHTTPレスポンスを春にストリームする方法

+0

あなただけの単一の要求から単一の応答を返すことができます。 –

答えて

0

私はこれをしなかった:

@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); 
    } 
関連する問題