java - 将图像的 byte[] 从 Spring Controller 发送到 jQuery

标签 java jquery spring image byte

请告诉我如何从 Spring Controller 获取图像并在 html 上显示其图像?现在我正在尝试:

@RequestMapping(value = "dictionaries/getImage", method = RequestMethod.GET, produces = MediaType.ALL_VALUE)
@ResponseBody
public byte[] getImage(@RequestParam Long ticketTemplateId, @RequestParam String imageName) throws IOException{
    Long eventOrganizerId = eventOrganizerService.getCurrentUserOrganizerProfile().getId();
    byte[] result = fileStorageService.getImage(ticketTemplateId, eventOrganizerId, imageName);

    return result;
}

jQuery 代码:

function downloadImage() {
            var imageName = $('#slc option:selected').val();
            var ticketTemplateId = getParameterByName('id');
            $.ajax({
                url: 'getImage',
                type: 'GET',
                data: ({ticketTemplateId: ticketTemplateId, imageName: imageName}),
                success: function(data) {
                    document.getElementById("ItemPreview").src = "data:image/png;base64," + data;
                }
            })
        }

在浏览器控制台中我收到此错误:

 data:image/png;base64,%EF%BF%BDPNG%1A%00%00%00IHDR%00%00%00%EF%BF%BD%00%00%…%EF%BF%BD5%EF%BF%BD0%EF%BF%BD%EF%BF%BD%00%00%00%00IEND%EF%BF%BDB`%EF%BF%BD net::ERR_INVALID_URL

最佳答案

您无法使用 ajax 发送原始字节,它会尝试将它们解释为 Utf-16 字符串。

您可以在服务器上使用 Base64 对这些字节进行编码,然后直接使用编码的字符串(与您正在使用的 js 代码完全相同)设置 src 属性。

在java端你只需要返回Base64.getEncoder().encodeToString(result)

关于java - 将图像的 byte[] 从 Spring Controller 发送到 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286174/

相关文章:

java - 如何处理网络中断和连接池

javascript - 部分 View 中的 MVC Ajax.BeginForm 在父 View 上执行函数更新父 View

javascript - 由于意外操作而将鼠标悬停延迟

java - Spring Boot @RequestParam 截断传入的 URL ?'s and #' s

java - 如何处理来自 WebClient 的异步响应?

java - Maven中集成测试模块使用什么打包类型

java - 在 iText 7 的 html2pdf 中显示货币符号的简单方法

java - Ant动态加载.properties文件

javascript - 如何在用户完成输入后几秒启动ajax函数

java - 使用 Hibernate/Spring/Maven/MySQL 测试运行后防止数据被删除