2016-04-27 57 views
0

我有這樣定義端點彈簧啓動休息服務:如何從春天啓動終端流媒體內容的JavaScript客戶端

@RequestMapping(value = "...", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE) //and octet for videos 
@ResponseBody 
public ResponseEntity<byte[]> get(...) { 
    //get image as byte array and return 
} 

而且在JavaScript客戶端(角):

var headers = {headers : {..., "Accept":"image/jpeg"}} 
var response = $http.get(...); 
obj.imageSrc = 'data:image/jpg;base64,' + response; 
obj.Image = new Image(); 
obj.Image.src = obj.imageSrc; 

我需要

我認爲這將端點像一個文件服務器上的普通圖像文件,使CL我們可以做一些事情(因爲這個問題的範圍之外的原因,它實際上並不是一個用URL訪問的原始圖像)。顯然這不是這種情況 - 字節數組必須轉換爲base64(有沒有辦法解決這個問題,因爲數組變得更大),這有旋轉圖像的效果。我錯誤地認爲從javascript中獲取像這樣的圖像很容易:(

其次,這樣做意味着javascript必須下載整個數組。有沒有一種方法可以定義允許的端點流使JavaScript可以在塊得到它(我想象Spring和JS具有實用功能,將處理呢?)

基本的根本問題

如何在春季正確地實現這個使要儘可能的Javascript友好?銘記我想同時提供兩個圖像(〜5MB)和視頻(〜100MB)

在此先感謝。

編輯 也許我應該使用FileResourceStream作爲返回類型?不知道這是否是「正確」的方式。

+0

爲什麼你必須在你的js中使用數據url?如果你直接使用你的控制器的URL作爲src,你不需要base64編碼,你可以返回「原始」字節....編輯:你應該讓你的控制器方法目錄寫入響應輸出流和返回無效.. – joshiste

回答

1

1)不要使用數據網址。使用你的控制器方法的直接url。

2)直接寫入HTTP響應的輸出:

@RequestMapping(value = "/dyna.jpg", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE) 
public void getImage(HttpServletResponse response) { 
    //write byte-array or -stream to the response using 
    // response.getOutputStream() 
} 

P.S.如果你真的需要數據url,那麼你不需要其他的方式,因爲它們需要base64編碼

相關問題