業務でCSVのアップロードを行っていますが、ファイルになりますと当然文字列ではなく、バイナリ形式のデータが必要になります。
アップロード自体の処理を書いていなかったので、その扱い方についてちょっと書いておきます。
fomタグ
まずHTMLの場合ですが、テキストだけでなく、ファイル(つまりはバイナリデータ)を渡す場合には、プロパティを別途セットする必要があります。
1 2 3 4 |
<h:form enctype="multipart/form-data"> <h:inputFile id="file" value="#{sampleBean.file}" /><br /> <h:commandButton action="#{sampleBean.upload()}" /><br /> </h:form> |
enctype="multipart/form-data" をセットするだけです。
この部分はJavaでも同じです。というかHTMLの構造なので変わるわけないですね・・
またinput type=”file”の代わりにh:inputFileを使います。
ManagedBean側での処理
ManagedBean側での処理ですが、こちらも文字列ではないので特殊なオブジェクトをセットする必要があります。
これはサーブレットのPartというクラスを使います。
1 2 3 4 5 6 7 8 |
@Named @RequestScoped public class SampleBean{ @Getter @Setter private Part file; } |
このように定義しておけばあとはPartオブジェクトのメソッドが使え、
- ファイル名の取得
- サイズの取得
- 実際の内部データの取り出し
などを行うことができます。
リファレンス・リンク
partオブジェクトのリファレンスは↓こちらです。
http://docs.oracle.com/javaee/7/api/javax/servlet/http/Part.html
その他参考にしたリンクはこちらです。
[Java] File Uploads Using JSF 2.2 and Java EE 7
バグ
なお、Pretty-facesを使っているとファイルを伴った繊維の時、マッピングが正常におこなわれませんでした。
原因は只今調査中です。