首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP 從資料庫讀取 Blob 圖片並顯示:Action 流式輸出與 img 標籤引用

     編輯:程式設計綜合問答

資料庫中儲存指紋圖片(BLOB),JSP 頁面需透過 <img> 標籤指向後端 Action 串流輸出,而非直接嵌入 Base64(過大影響頁面載入)。

JSP 頁面

<img src="personAction_showByID.action?personId=${param.personId}" 
     title="指紋圖片" style="width:200px; height:250px;" />

Struts2 Action

public class PersonAction extends ActionSupport {
    private PersonService personService;
    private String personId;
    // getter/setter
    
    public String showByID() {
        HttpServletResponse response = ServletActionContext.getResponse();
        try {
            Person person = personService.getPerson(personId);
            byte[] photo = person.getImg(); // BLOB 映射為 byte[]
            if (photo != null) {
                response.setContentType("image/jpeg"); // 或 png/bmp 視實際格式
                response.setContentLength(photo.length);
                try (ServletOutputStream out = response.getOutputStream()) {
                    out.write(photo);
                    out.flush();
                }
            } else {
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
        return NONE; // 直接輸出流,不轉發視圖
    }
}

關鍵點

  • 返回 NONE:Struts2 不再尋找結果視圖,避免雙重提交/空白頁。
  • 設定 Content-Type:瀏覽器依此決定解碼方式,若資料庫未存格式,可預設 image/jpeg 或檢測魔數。
  • 快取控制:response.setHeader("Cache-Control", "max-age=3600"); 減少重複請求。
  • 大圖片分片/壓縮:若圖片超大(>1MB),建議後端壓縮或前端懒加載。

Hibernate 實體映射

@Entity
@Table(name = "fingerprint")
public class Person {
    @Id @Column(name = "person_id")
    private String personId;
    
    @Lob @Basic(fetch = FetchType.LAZY)
    @Column(name = "img_data", columnDefinition = "BLOB")
    private byte[] img;
    // getter/setter
}

此模式適用於所有「資料庫 Blob → 網頁圖片顯示」場景(驗證碼、用戶頭像、文檔預覽等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved