在春天mvc上传和查看图像

时间:2015-07-16 13:41:09

标签: java spring image jsp spring-mvc

我正在尝试在数据库中上传图像,然后在使用spring MVC开发的Web应用程序中的jsp上显示它。 我已经阅读了有关这个问题的所有问题,但我没有得到它。 我正考虑将图像保存在blob字段中,而不是clob字段中。这是个好主意吗?

我创建了一个带有文件输入的多部分表单。

<form:form method="POST" action="monorigineEdit" modelAttribute="formMonorigineEdit"  enctype="multipart/form-data"> 
...
    <input type="file" name="image">
...
</form:form>

在控制器中,我以这种方式正确获得了多部分文件

public String monorigineEdit(@RequestParam("image") MultipartFile file, HttpServletRequest request, ModelMap model,
        @ModelAttribute(value = "formMonorigineEdit") @Valid MonorigineDTO monorigineDTO, BindingResult result, RedirectAttributes redirectAttrs) throws FacadeException

出于测试目的,我想将图像转发到base64中的jsp并以这种方式在控制器中显示

...
File auxFile = multipartToFile(file);
FileInputStream fi = new FileInputStream(auxFile);
byte[] byteArrayImage = Base64.encodeBase64(IOUtils.toByteArray(fi));
model.put("myImage", byteArrayImage);
return new String("monorigineEditTemplate");

并在jsp中使用此标记

<img id="myImg" name="myImg" src="data:image/jpeg;base64,<c:out value='${myImage}'/>" >

multipartToFile方法就是这个:

public File multipartToFile(MultipartFile multipart) throws IllegalStateException, IOException
{
    File convFile = new File(multipart.getOriginalFilename());
    multipart.transferTo(convFile);
    return convFile;
}

问题是浏览器没有显示图像,但我无法找到我错的地方。

你能帮帮我吗? :) 非常感谢。

1 个答案:

答案 0 :(得分:0)

以下是将图像转换为String并显示它的方法:

  import org.apache.commons.codec.binary.Base64;

public String convertByteArrayImagetoString(){
            BASE64Encoder base64Encoder = new BASE64Encoder();

    File imagePath = new File(defaultPersonImagePath);
                    try {
                        BufferedImage bufferedImage = ImageIO.read(imagePath);
                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                        ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
                        photoString = "data:image/png;base64," + base64Encoder.encode(byteArrayOutputStream.toByteArray());
                    } catch (IOException e) {
                        e.printStackTrace();
                        return "";
                    }
}

如果您有疑问,请告诉我。