1

Web 上にほとんど答えがない、非常に単純な質問です。オブジェクトとして byte[] を使用しています。現在、画像全体をメモリに読み込んでから書き込んでいます。とてもシンプルです。

    @Column(name = "FILE_DATA")
private byte[] fileData;

ストリーミングしたいので、inputStreamを使用する必要があると思いますが、休止状態はそれが好きではありません。

これを設定するにはどうすればよいですか?

編集:

これを試してみましたが、-314 db2 エラーが発生しました:

Blob b = null;
        try {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.com", 80));
            URL urls = new URL(url);
            URLConnection conn = urls.openConnection(proxy);
            b = new BlobImpl(conn.getInputStream(), conn.getContentLength());
        } catch (Exception e) {
            e.printStackTrace();
        }

        att.setFileData(b);
        this.theDao.save(att);
4

3 に答える 3

2

Blobデータ型を使用して、データベースから画像を挿入およびフェッチできます。また、バイナリ入力ストリームのオプションも提供します。dbフィールドをblobとして使用し、バイト配列の代わりにblobojbectを作成するだけです。

b.getBinaryStream()

また、Blobを作成することもできますbytes[]

Hibernate.createBlob(bytes);

そして最も簡単な解決策ハードドライブに保存し、データベースに画像に関する情報を保持します。

于 2012-04-20T18:37:26.113 に答える
0

考えられる解決策の 1 つは、データベースにファイル名 (URL) を保持し、ディスク (ネットワーク リソース) からデータをストリーミングしてストリーミングすることです。

URL を返すだけで、ブラウザと Apache/Nginx によって処理される場合 (したがって、ストリーミングについてまったく心配する必要はありません)、Web にはこのアプローチをお勧めします。

于 2012-04-20T18:19:53.457 に答える
-1

「休止状態はそれが好きではない」という意味を理解できませんか?

簡単に定義できる方法を次に示します。

@Entity Photo {
    @Id @GeneratedValue
    private Long id = null;

    private String filename = null;

    @Lob
    private byte[] bytes = null;
    }

次に、データをオブジェクトにロードします...

String filename = // Where ever this comes from...
File file = new File(filename);
InputStream is = new FileInputStream(file);

Photo photo = new Photo();
photo.setFilename(filename);

// Create and fill the byte array from the file.
byte[] bytes = new byte[(int) file.length()];
is.read(bytes);
photo.setBytes(bytes);

次に、最終的に Hibernate にデータベースに保存するように指示します。

session.saveOrUpdate(photo);
于 2012-04-23T15:08:59.987 に答える