0

ファイル (最大 50 mb) を DB にアップロードするために、JSP / サーブレット / EJB (JPA 用) を使用して単純な webapp を作成しようとしています。

私のエンティティクラス(ユーザー)には、次のコードがあります:

@Lob
private byte[]             file;

サーブレットでファイルを取得する方法は次のとおりです(実際には、コンピューターにファイルを保存し、変更したいです):

for (Part part : request.getParts()) {
        InputStream is = request.getPart(part.getName()).getInputStream();
        int i = is.available();
        byte[] b = new byte[i];
        is.read(b);
        String fileName = getFileName(part);
        FileOutputStream os = new FileOutputStream("C:/files/" + fileName);
        os.write(b);
        is.close();
} 

User エンティティに (for ループを使用して) バイト配列を書き込む方法がわかりません。何か案は ?

4

1 に答える 1

2

入力ストリームの処理が正しくavailableありません。メソッドはストリーム全体の長さを返さず、ストリームがブロックされる前に読み取ることができる (推定) 量のみを返します。見積もり重視。読み取り呼び出しの結果が -1 になるまで、ストリーム全体の読み取りをループするか、IOUtilsApache Commons IOのようなユーティリティを使用する必要があります。

final byte[] data = IOUtils.toByteArray(inputStream);

データを取得したら、エンティティに設定するだけです。

entity.setFile(data);

そして、それを保存します。

于 2013-04-21T12:20:38.593 に答える