2016-04-27 46 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编码

相关问题