3

登録フォームを持つ Spring MVC アプリケーションがあります。このフォームには、base64 データ形式の画像があります。このデータをデータベースに保存したいと思います。現在、入力要素にbase64データを格納しています。これに関していくつか質問があります。

  1. 現在、入力要素を使用していますが、挿入時にエラーが発生しています (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

    または、Javaで文字列をBLOBに変換する方法はありますか

  2. データが base64 であっても、フォーム タグで enctype="multipart/form-data" を使用する必要がありますか?

  3. base64データがhtmlファイル要素に保持されている場合、NULLかどうかを確認するために検証を実行するにはどうすればよいですか?

4

2 に答える 2

1

たとえば、 for Blobを に追加せずpathに、Blobの<form:input path="theBlobField">PropertyEditorinitBinder

つまり、String 型の値を Blob 型に直接格納しようとしているということです。IllegalStateException.

考えられるアプローチはPropertyEditor、Base64 でエンコードされた文字列を Blob 型に変換する を作成することです。

エンコードされた文字列をデコードするには、バイト配列を返すapache commonsを使用Base64.decodeBase64してから、それらのバイトをBlobに変換する魔法を実行できます

別の解決策は、パスを忘れて、単純な<input name="photoData">タグを使用し、バックエンドでrequest.getParameter("photoData")、base64 でエンコードされた文字列データを取得するだけを使用することです。

もう1つ、うまくいかない場合は、エンコードされたデータが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);
于 2013-03-05T05:45:32.050 に答える
1

You can use LobHelper to convert it to a Blob. You get the LobHelper from your hibernate session Session.getLobHelper().

As long as you don't have an <input type="file" />, there should be no need for enctype="multipart/form-data".

Validation should work as on ordinary String properties with @NotNull.

Personally I wouldn't store it encoded.

于 2013-02-03T11:08:50.543 に答える