Javascript 如何在JS中对二进制图像进行base64编码以供浏览器显示
我们在浏览器中显示从REST后端API接收的二进制图像(实际上是Chrome)时遇到问题。在Java中定义的后端REST端点如下Javascript 如何在JS中对二进制图像进行base64编码以供浏览器显示,javascript,base64,frontend,progressive-web-apps,Javascript,Base64,Frontend,Progressive Web Apps,我们在浏览器中显示从REST后端API接收的二进制图像(实际上是Chrome)时遇到问题。在Java中定义的后端REST端点如下 @GetMapping(path = "/images/{imageId:\\d+}/data", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public @ResponseBody byte[] getImageData(@PathVariable long imageId) { return
@GetMapping(path = "/images/{imageId:\\d+}/data", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public @ResponseBody byte[] getImageData(@PathVariable long imageId) {
return ... skipped ...
}
在前端,我们执行以下步骤:
fetch
JS方法调用请求图像数据
元素,但没有成功:(因此,问题是如何在前端接收正确的base64图像以供浏览器显示?我们做错了什么?以下是一些基于上述@somethinghere注释的工作代码。请注意
getImage
中如何处理响应
:
函数getImage(id){
回传(`https://placekitten.com/200/140`, {
方法:“GET”,
})。然后(响应=>{
返回response.blob();//我无法测试,因为您粘贴了一个图像而不是原始数据:/…但我会尝试在某些
标记的src属性中使用它。您是否也可以发布步骤1的前端代码?数据url中的类型应为图像/jpeg
,而不是应用程序/octet流
。可能是返回的重复响应。文本();,尝试使用<代码>返回响应.Bub();< /Cord>并直接将响应导入到 Read StaseDall 中,在可能出错的中间删去混乱的转换步骤。
async function getImage(id) {
return await fetch(`${URL}/images/${id}/data`, {
method: 'GET',
headers: new Headers(HEADERS)
}).then(response => {
return response.text();
});
}
let reader = new FileReader();
reader.addEventListener('loadend', event => {
console.log(event.srcElement.result)
});
reader.readAsDataURL(new Blob([data]));