2012-05-09 11 views
8

id、descおよびimageByteArrayという属性を持つフォームBeanがあります。 Strutsアクションが実行され、JSPにリダイレクトされ、id、descなどのこれらのBean属性にアクセスして、imageByteArrayを変換してイメージとして表示します。私はこれを試しましたpost、それは私のために働いていません。base64バイト配列をイメージに変換する

私はBase64で使用したByteArrayエンコード - this.bean.imageByteArrayが

this.bean.setImageByteArray(new org.apache.commons.codec.binary.Base64().encode(imageInByteArr)); 

私はこれを試みたフォームBeanを指すが、

<img src="data:image/jpg;base64,<c:out value='${bean.imageByteArray}'/>" /> 

バイト配列を動作しない(バイト[] imageByteArray )、base64でエンコードJPGの画像を参照し、私は出力として、次のimgタグを取得していますし、明らかに何も表示されません取得します

<img src="data:image/jpg;base64,[[email protected]"> 

Base64バイト配列を変換してJSPでイメージとして表示する方法はありますか?

+0

「動作していない」とは、正確には何を意味するのかをご確認ください。出力はどのように見えましたか? 'imageByteArray'の型は何ですか?私は 'encodeString'を呼び出さなければならないと思います... – home

+0

@home私のコメントを参照してください – SyAu

+0

実際の(base64ではない)バイト配列をイメージとして表示する必要がある人は、a.oに向かいます。 http://stackoverflow.com/q/2340406 – BalusC

答えて

11

あなたが得るのは、配列のtoString出力だけです。しかし、バイト配列をStringに変換する必要があります。

はあなたのJSP内のBean


public String getByteArrayString() 
{ 
    return new String(this.imageByteArray); 
} 

と参照この方法を作成する必要があります。

技術的には、base64バイトの配列に使用するエンコードを定義する必要がありますが、これはすべての文字が標準の7ビットASCII範囲にあるため必須ではありません。

+0

優れています。できます。私はこのタイプの質問に関連した多くのSOの投稿をチェックしましたが、正解は見つかりませんでした。あなたは私の時間を救った。ありがとう。 – SyAu

+0

参考になりました:)感謝: –

+0

私はちょうどこの答えを見たことがありますが、これはほとんど確実にここで行うべき正しいことではありません。それは基本的に2つの悪い考えをお互いの上に置くことです。 OPはすでにbase64エンコーディングを実行しています。バイト配列ではなくオブジェクト内に*文字列*として保存する必要があります。あるいは、データを出力するまで、データをベース64エンコードするべきではありません。基本的に正しい変換はbase64でエンコードされた文字列への '' byte [] 'です - base64でエンコードされ、ASCIIエンコードされたbyte []に​​変換するのではなく、byte []をstringに変換します。 –

3

ダブルマントの答え(執筆時点で受け付けています)は、2つの間違いを使って正しいことをするため、残念です。 Apache Commons Codecが間違ったことをするのをとても簡単にするのに役立ちません:(

Base64は基本的にバイナリデータからテキストへのエンコーディングです。したがって、ほとんどの場合、byte[]をa 。Stringあなたの問題は、あなたがbyte[]byte[]に変換しているということです - 。しかし、あなたは、後に文字列としてそのデータを使用したい正しい方法で、一度を変換する方が良いだろう

今あなたがすることができます。あなたがbase64(と文字列)に変換するときに正確に選択します。Javaコードで早く行うことができます。その場合、私は次のように使います:

// Obviously you'd need to introduce a new method for this, replacing 
// setImageByteArray 
this.bean.setImageBase64(new Base64().encodeToString(imageInByteArr)); 
<img src="data:image/jpg;base64,<c:out value='${bean.imageBase64}'/>" /> 

また、あなたはあなたのBean内だけでバイナリデータを保持し、JSPで符号化を行うことができます。私はJSPを書いて以来長い時が経っていますので、ここでそのコードを書くつもりはありません。

基本的に、元のバイナリデータをbyte[]、またはbase64でエンコードされたデータをStringとして保存するかどうかを決定する必要があります。他の何かが誤解を招く、IMO。

関連する問題