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

时间:2016-02-09 07:25:47

标签: 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

1 个答案:

答案 0 :(得分:1)

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

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

在java方面,您只需要return Base64.getEncoder().encodeToString(result)