簡體   English   中英

使用Spring MVC流媒體的正確方法是什么

[英]What is proper way to stream media with Spring MVC

我有一個控制器方法,該方法僅將媒體(圖像,css,js等)的字節流傳輸到客戶端。 我首先嘗試了這樣的事情:

@RequestMapping(value="/path/to/media/**", method=RequestMethod.GET)
@ResponseBody
public byte[] getMedia(HttpServletRequest request) throws IOException
{
    //logic for getting path to media on server

    return Files.readAllBytes(Paths.get(serverPathToMedia));
}

我最初是在Firefox中進行測試的,但似乎一切正常。 但是,然后我在Chrome中嘗試了一下,然后發現所有圖像均無效。 因此,我將其更改為如下所示:

@RequestMapping(value="/path/to/media/**", method=RequestMethod.GET)
public ResponseEntity<byte[]> getMedia(HttpServletRequest request) throws IOException
{
    //logic for getting path to media on server

    byte[] bytes = Files.readAllBytes(Paths.get(serverPathToMedia));
    //logic for setting some header values like Content-Type and Content-Length
    return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
}

得到的結果與以前相同。 我在開發人員工具中看到我的響應標頭按預期下降,但仍然沒有圖像字節

接下來,我嘗試了這樣的事情:

@RequestMapping(value="/path/to/media/**", method=RequestMethod.GET)
public void getMedia(HttpServletRequest request, HttpServletResponse response) throws IOException
{
    //logic for getting path to media on server

    byte[] bytes = Files.readAllBytes(Paths.get(serverPathToMedia));
    response.getOutputStream().write(bytes);
}

甚至沒有設置任何響應頭,就可以在Firefox和Chrome中使用。 現在,盡管我可以用它做的最后一種方法,但是它似乎並不是正確的Spring MVC方法。 我想知道為什么我嘗試的前兩件事沒有用,因為它們似乎更正確。 另外,有沒有我沒有嘗試過的東西實際上是正確的方法?

您的最后一種方法幾乎是解決該問題的方法。 我可以建議的唯一更改是,不要將整個內容文件保留在內存中,而要通過緩沖來流出內容-來自Apache commons的IOUtils可以為您做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM