gpt4 book ai didi

javascript - 如何从 JavaScript 客户端的 Spring Boot 端点流式传输媒体内容

转载 作者:行者123 更新时间:2023-12-03 07:04:34 27 4
gpt4 key购买 nike

我有一个 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 中的客户端( Angular ):

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 作为返回类型?不知道这是否是“正确”的方式。

最佳答案

1) 不要使用数据 URL。使用 Controller 方法的直接 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()
}

附注如果您确实需要数据 url,则没有其他办法,因为它们需要 base64 编码

关于javascript - 如何从 JavaScript 客户端的 Spring Boot 端点流式传输媒体内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com