【发布时间】:2016-04-27 08:41:04
【问题描述】:
我有一个 spring boot rest 服务,其端点定义如下:
@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;
我需要什么
我认为此端点的行为类似于文件服务器上的常规图像文件,以便客户端可以对其进行获取(由于此问题范围之外的原因,它实际上不能是要访问的原始图像带有网址)。显然情况并非如此 - 字节数组必须转换为 base64(有没有办法解决这个问题,因为数组变得更大),这具有旋转图像的效果。我错误地认为在 javascript 中从这样的 API 获取图像会很容易:(
其次,这样做意味着 javascript 必须下载整个数组。有没有一种方法可以定义端点以允许流,以便 javascript 可以分块获取它(我想 Spring 和 JS 都有可以处理这个的实用函数?)
基本问题
如何在 Spring 中正确实现这一点,以尽可能地对 Javascript 友好?请记住,我想同时提供图片(~5MB)和视频(~100MB)
提前致谢。
编辑 也许我应该使用 FileResourceStream 作为返回类型?不知道这是否是“正确”的方式。
【问题讨论】:
-
为什么要在你的js中使用数据url?如果您将控制器的 url 直接用作 src,则不需要 base64 编码,并且可以返回“原始”字节.... 编辑:您应该让控制器方法目录写入响应输出流和返回无效..
标签: javascript java angularjs spring spring-boot