Java spring mvc将base64显示为图像

Java spring mvc将base64显示为图像,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在使用WYSWIG作为我网站上的文本编辑器。 当用户在编辑器上粘贴图像时,图像将作为 我想得到这个base64字符串,将它保存在数据库中,然后创建像/image/{id}这样的端点,它将显示这个图像,所以在文章中,我不必将整个base64字符串放在图像源中,而只需像上面所示的url 这就是我如何将base64保存为字节[]: @RequestMapping(value = {"/main/createpost"}, method = RequestMethod.POST) publi

我正在使用
WYSWIG
作为我网站上的文本编辑器。 当用户在编辑器上粘贴图像时,图像将作为

我想得到这个
base64
字符串,将它保存在数据库中,然后创建像
/image/{id}
这样的端点,它将显示这个图像,所以在文章中,我不必将整个
base64
字符串放在图像源中,而只需像上面所示的url

这就是我如何将
base64
保存为
字节[]

@RequestMapping(value = {"/main/createpost"}, method = RequestMethod.POST)
    public String postPost(Model model, Principal principal,@RequestParam(name="editor-content") String postPayload) throws IOException {


        postPayload = checkAndSavePhotos(postPayload);
        model.addAttribute("editor",postPayload);
        return "createpost";
    }
checkAndSavePhotos
正在检查编辑器是否包含任何图像,以及是否将其存储在数据库中:

private String checkAndSavePhotos(String postPayload) throws IOException {
        int i =1;
        Pattern pattern = Pattern.compile(".*<img src=\".*;base64,(.*?)\".*/>");

        Matcher matcher = pattern.matcher(postPayload);
        while (matcher.find()) {
            PostPhoto postPhoto = new PostPhoto();
            byte[] bytes = Base64.getDecoder().decode(matcher.group(i).getBytes());
            MultipartFile mf =null;
            try {
                BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(bytes));
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ImageIO.write(originalImage, "png", baos);
                baos.flush();
                mf = new MockMultipartFile("test", baos.toByteArray());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            postPhoto.setContent(mf.getBytes());
            postPhoto = postPhotoService.save(postPhoto);
        }

        return null;
    }
现在,当我查看数据库
content
列时,它看起来像:
\X89504E470D0A1A0A0000000D4948452000000028000002806000008CFEB86D0000033F494415478DAED9(…)

当文件从
filebucket
\377\330\377\341\000\030Exif\000\000II*\000\010\000\000\000\000\000\000\000\000\000\000\000\377\354\000\021Ducky\000\001\000\004\000\000\000A\000\000\377\341\003ohttp://ns.adobe.com/xap/1.0/\000(…)


有谁能给我一个提示如何使它工作吗?

看起来这是一个愚蠢的错误

我的数据库列
content
属于
text
类型,因此我将
byte[]
存储为文本,因此浏览器未正确解码文件并不奇怪


将数据库列类型更改为
bytea
解决了问题

您可以按此处所述在响应中写入文件,或按此处所述返回HttpEntity
@RequestMapping(value = "/main/postphoto/{imageId}")
    @ResponseBody
    public byte[] getImage(@PathVariable Long imageId) throws IOException  {
        PostPhoto image = postPhotoService.findById(imageId);

        return image.getContent();
    }