SpringMVC存储Base64

时间:2013-02-02 13:12:30

标签: java html spring-mvc base64

我有一个Spring MVC应用程序,它有一个注册表单。此表单具有base64数据格式的图片。我想将这些数据存储在数据库中。目前我将base64数据存储在输入元素中。我对此有几个问题;

  1. 我应该在什么html元素中保存base64数据我正在使用输入元素但是我在插入时遇到错误(Blob是数据库和Java对象中使用的数据类型) -

    Failed to convert property value of type java.lang.String to required type java.sql.Blob for property photo; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.sql.Blob] for property photo: no matching editors or conversion strategy found

    OR有没有办法将字符串转换为java中的BLOB

  2. 我还需要使用enctype =" multipart / form-data"在表单标签上甚至认为数据是在base64中?

  3. 如果base64数据存储在html文件元素中,我该怎样对其进行验证以检查它是否为NULL?

2 个答案:

答案 0 :(得分:1)

您可以使用LobHelper将其转换为Blob。你从休眠会话Session.getLobHelper()获得了LobHelper。

只要您没有<input type="file" />,就不需要enctype =“multipart / form-data”。

验证应该与@NotNull的普通String属性一样。

我个人不会存储它。

答案 1 :(得分:1)

您可能已将Blob的path放入,例如<form:input path="theBlobField">,但未在PropertyEditor

中为Blob添加initBinder

这意味着,您尝试直接将String类型的值存储到Blob类型 - 瞧! IllegalStateException异常。

可能的方法是创建一个PropertyEditor,将Base64编码的String转换为Blob类型。

要对已编码的String进行解码,您可以使用appache commons'Base64.decodeBase64返回一个字节数组,然后将这些字节转换为Blob

另一种解决方案是忘记路径,使用简单的<input name="photoData">标记,然后在后端使用request.getParameter("photoData")获取base64编码的字符串数据

还有一件事,如果事情不起作用,那么编码数据可能会以mimeType声明开头。要删除它,请使用

//@RequestParam data
//remove mimeType declaration in the data string first
String byteStr = data.split(",")[1];


//get the byte array of the data
byte[] bytes = Base64.decodeBase64(byteStr);