1. 程式人生 > >圖片儲存到資料庫中,通過Servlet+jsp進行圖片的儲存及展示

圖片儲存到資料庫中,通過Servlet+jsp進行圖片的儲存及展示

因專案需要,圖片型別的檔案無法儲存到本地磁碟中,必須以二進位制的格式儲存到資料庫中。以這樣的方式進行讀寫操作時候,就遇到各種問題,下面分別進行問題展示,並列出解決方案:
問題一、圖片在資料庫中的格式問題:
看了眾多的參考資料,最終以longblob的格式儲存圖片,我採用的資料庫是mysql資料庫,下面展示圖片的儲存操作:

select * from sensitiveInfo.senInfo CREATE TABLE `senInfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imageName` varchar(45) DEFAULT
NULL, `senText` varchar(200) DEFAULT NULL, `image` longblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4;

問題二、圖片的讀寫操作:
圖片以blob進行讀寫的時候,會出現格式轉換問題,尤其是需要對Blob格式進行處理的操作。
我是以DBUtils下面的QueryRunner進行的資料庫讀寫,此工具很簡單,大家可以百度下怎麼使用,

QueryRunner qr = DBUtils.getQueryRunner();

    @Override
public List<SenInfo> getAllSenInfo() { String sql = "select * from senInfo"; try { return qr.query(sql, new BeanListHandler<SenInfo>(SenInfo.class)); }catch(Exception e) { LogUtils.getLogger(SenInfoDao.class.getName(), "error", e.toString()); } return
null; } @Override public SenInfo getSenInfo(int id) { String sql = "select * from senInfo where id = ?"; try { return qr.query(sql, new BeanHandler<SenInfo>(SenInfo.class), id); } catch (Exception e) { LogUtils.getLogger(SenInfoDao.class.getName(), "error", e.toString()); throw new RuntimeException(e); } }

問題三、前端JSP頁面在進行展示的時候出現的格式轉換問題:
jsp頁面顯示總不能顯示出該圖片的物件類,必須多物件類進行操作,我採用的方法是將圖片呼叫該類的Servlet連結,通過ID呼叫圖片的,Servlet裡通過對圖片流進行處理,將二進位制流轉換為圖片。
頁面中使用c:forEach迴圈,如下:

<c:forEach items="${requestScope.senInfoList}" var="senInfoList">
            <li>${senInfoList.imageName },${ senInfoList.senText},
            <img width="250px" height="400px" src="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showImage&imageId=${senInfoList.id}"/></li>
        </c:forEach>

servlet裡面,通過獲取該類的method與ID,進行查詢資料庫操作:

private void showImage(HttpServletRequest request,HttpServletResponse response,String imageId) {
        SenInfo senInfo= senInfoService.getSenInfo(Integer.parseInt(imageId));
        if(imageId != null){  
            response.setContentType("image/jpeg");  
            try {  
                InputStream is = new ByteArrayInputStream(senInfo.getImage()) ;  
                if(is != null){  
                    is = new BufferedInputStream(is) ;  
                    BufferedImage bi = ImageIO.read(is) ;  
                    OutputStream os = response.getOutputStream() ;  
                    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os) ;  
                    encoder.encode(bi);  
                    os.close();    
                    is.close();    
                }  
            } catch(IOException e){  
                e.printStackTrace();  
            }
        }  
    }

程式碼如上所示,不需要過多解釋,有基礎的肯定能看懂。沒基礎的可以聯絡我,具體問題具體分析。
程式碼僅供參考!

相關推薦

圖片儲存資料庫通過Servlet+jsp進行圖片儲存展示

因專案需要,圖片型別的檔案無法儲存到本地磁碟中,必須以二進位制的格式儲存到資料庫中。以這樣的方式進行讀寫操作時候,就遇到各種問題,下面分別進行問題展示,並列出解決方案: 問題一、圖片在資料庫中的格式問題: 看了眾多的參考資料,最終以longblob的格式儲存

linux區域網通過主機名進行通訊

 在一個區域網中,每臺機器都有一個主機名,用於主機與主機之間的便於區分,就可以為每臺機器設定主機名,以便於以容易記憶的方法來相互訪問。比如我們在區域網中可以為根據每臺機器的功用來為其命名。主機名相關的配置檔案:/etc/hosts;    hosts 配置檔案是用來把主機

vb讀取感測器溫溼度儲存資料庫java實現呈現在頁面上

首先看一下最終的效果圖 資料庫圖片展示 最終程式碼: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="http://ja

MyBatis自身集合巢狀遞迴查詢目錄樹(適用於MySQL、ORACLE等資料庫遞迴程式碼都寫在XML通過SQL完成)

JAVA程式碼實現(連結):MySql、Oracle(通用方法)遞迴查詢生成檔案目錄樹(JAVA實現 遞迴過程中不訪問資料庫,遞迴之前只訪問兩次 進行遞迴前資料準備)   以下是XML中實現檔案樹的查詢、遞迴 場景:根據交易編碼,查詢檔案樹 檔案、資料夾都存放TRADER_

SpringMVC+mybatis實現圖片文字同時上傳並儲存資料庫

個人專案中遇到同時上傳圖片及文字到資料庫中,網上查好多資料才解決,謹以此文記之。HTML程式碼:<form class="form-inline" id="zc_form" action="save.do" method="post" enctype="multip

圖片不存放資料夾直接存在資料庫

<?php session_start(); include("Conn/conn.php"); $tpmc = $_POST['tpmc']; $file = $_FILES['file'];//added $file = $file['tmp_name'];/

jsp裡面實現註冊新使用者的功能但是不能把資料插入到資料庫是怎麼回事求助我的程式碼如下

RegisterServer.java package com.cqnu.service; import com.cqnu.dao.UserDao; import com.cqnu.pojo.DBCon; import com.cqnu.pojo.UserPojo; imp

jsp頁面之間通過servelt呼叫DAO方法讓DAO回傳入的值通過servlet調到轉入的頁面

2014.9.1開始接觸jsp <pre name="code" class="plain"> person.jsp <form action="aaa" method="pos

生產環境通過域名映射ip切換工具SwitchHosts

data sts track ack switch driver eve tail blog 項目中,經常需要配置host。將某個域名指向某個ip。手動配置C:\Windows\System32\drivers\etc\hosts,非常不方便。這裏分享一個可以高效切換hos

微信公眾號跳轉到小程序通過api

log ini post 推送 打開 key 配置 media 二級菜單 參數是否必須說明button是一級菜單數組,個數應為1~3個sub_button否二級菜單數組,個數應為1~5個type是菜單的響應動作類型,view表示網頁類型,click表示點擊類型,mini

Asp.Net MVC JS通過ajaxfileupload上傳圖片獲取身份證姓名、生日、家庭住址等詳細信息

新手上路 pri virt them boolean tac 識別 multipart utf 客戶要求用身份證圖片上傳獲取身份證的詳細信息就下來研究了一下(現在的客戶真的懶 身份證信息都懶得輸入了哈哈...),經過慢慢研究,果然皇天不負有心人搞出來了。這個借助的是騰訊

【Python求助】在eclipse和pycharm通過adb install安裝中文名字APK時老是報錯如何解決

style com all auto RoCE mod python lin sage 1 # -*- coding: utf-8 -*- 2 import os 3 import sys 4 import subprocess 5 import time 6 from

WPF MVVM模式通過命令實現窗體拖動、跳轉以及顯隱控制

原文: WPF MVVM模式中,通過命令實現窗體拖動、跳轉以及顯隱控制 在WPF中使用MVVM模式,可以讓我們的程式實現介面與功能的分離,方便開發,易於維護。但是,很多初學者會在使用MVVM的過程中遇到一個顯而易見且無法迴避的問題,那就是不同的窗體之間如何跳轉?很多人在介紹MVVM的使用時,都沒有明顯提到該

python3插入資料庫如果資料存在引號的解決方案

這裡判斷了是否傳進來的是list還是str,然後將在有引號的位置新增上引號 def escape_character(string): script = ‘’ if type(string) == type([]): script_tmp = “,”.join(string) else:

Java開發通過sql來實現過濾以及分頁

  我們通過一個需求來引入問題。 首先,簡單介紹一下需求:實現一個下圖的頁面,包含了過濾以及分頁。資料是後臺資料庫獲得到的。 那麼關於如何實現過濾以及分頁,考慮到通過前臺實現或者後臺實現,我們不妨來分析一下兩種方法。 首先,前臺實現:無非就是後臺獲取所有的list,傳

Kubernetes通過Service訪問Pod快速入門

一.背景 理想狀態下,我們可以認為Kubernetes Pod是健壯的。但是,理想與現實的差距往往是非常大的。很多情況下,Pod中的容器可能會因為發生故障而死掉。Deployment等Controller會通過動態建立和銷燬Pod來保證應用整體的健壯性。眾所周知,每個pod都擁有自己的IP地址,當新的Con

Java儲存資料庫時間戳和php操作資料庫時間戳的關係

一直困擾我的問題,終於得到了解決!原先以為是自己系統問題(其實也可以確定自己的系統是64位),於是利用一下程式碼測試自己的系統是不是有問題,得到的結果是沒問題的,但是就是無正確結果輸出。於是解決問題途徑是在strtotime()函式和date(format,time())函式之間徘徊。

VS程式設計WPF通過telerik控制元件建立顏色選擇器顏色拾取器調色盤的一種方法

 這裡展示使用telerik控制元件時,呼叫顏色調色盤,顏色選擇器,顏色拾取器的一種方法 1、增加引用 2、前臺定義引用 xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"

VS程式設計WPF通過C# 建立顏色選擇器顏色拾取器調色盤的一種方法

有時為了美觀,需要動態、靈活的更改某一控制元件的顏色, 這時通過顏色選擇器進行取色是比較方便的一種方法。 參考:網址 顏色選擇器效果如下: 1、前臺定義一個控制元件並命名 2、前臺定義一個事件 3、增加兩個引用 4、增加

在mac系統docker pull 下來的映象儲存在哪裡?

Docker依賴Linux系統的cgroup實現,在mac系統中執行的時候,Docker會啟動一個虛擬機器中的Linux核心,並在硬碟上放一個 qcow2 格式的磁碟映象檔案。這個檔案會隨著Docker的使用不斷膨脹,即使刪除不用的Docker Image和Container也不會縮小。 Docke