我正在尝试在数据库中上传图像,然后在使用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;
}
问题是浏览器没有显示图像,但我无法找到我错的地方。
你能帮帮我吗? :) 非常感谢。答案 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 "";
}
}
如果您有疑问,请告诉我。