首頁 >資料庫 >mysql教程 >從資料庫轉換 Blob 時,為什麼我的「BufferedImage」為空?

從資料庫轉換 Blob 時,為什麼我的「BufferedImage」為空?

Patricia Arquette
Patricia Arquette原創
2024-11-10 12:28:02898瀏覽

Why is my `BufferedImage` null when converting a Blob from a database?

將BufferedInputStream 轉換為映像

從資料庫轉換Blob 時遇到問題,您認為該Blob 是JPEG 格式的影像,進入BufferedImage進行進一步處理。轉換失敗,您的 Image 變數仍為空。

轉換失敗的可能原因

檢查您的程式碼後,有幾個潛在問題可能會導致轉換失敗:

  1. 資料擷取:程式碼使用以下方式擷取blob 資料blob.getBytes(1, blobLength)。但是,blobLength 是以 long(64 位元整數)形式取得的,而 getBytes 則需要 int(32 位元整數)。這種不匹配可能會導致資料截斷和不正確的影像檢索。
  2. 映像驗證:確保 uploadedInputStream 流包含有效的映像將是一個很好的起點。您可以使用 ImageIO.write 將映像暫時寫入文件,然後讀回以驗證其完整性。
  3. Blob 內容處理: 根據 H2 資料庫文檔,Blob 內容不會儲存在記憶體中。因此,您應該使用 blob.getBinaryStream 來檢索 blob 的流表示形式,而不是使用 blob.getBytes。

解決方案

解決問題,嘗試修改您的程式碼如下:

public Response post(@PathParam("id") String id) throws IOException {
    Connection con = connection();
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    InputStream blobStream = null;
    int blobLength = 0;
    try {
        blobLength = (int) blob.length();
        blobStream = blob.getBinaryStream(1, blobLength);
        image = ImageIO.read(blobStream);
    } catch (SQLException e2) {
        e2.printStackTrace();
    }  

    return Response.ok(image).build();
}

此外,您應該驗證有效性通過將uploadedInputStream 寫入檔案並將其讀回以確保它包含映像。

以上是從資料庫轉換 Blob 時,為什麼我的「BufferedImage」為空?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn