将整个图片存入数据库的BLOB字段中,在数据库中有二进制数据,但是图片不能显示?

将整个图片存入数据库的BLOB字段中,在数据库中有二进制数据,但是图片不能显示?,第1张

1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中. 要这里有关数据的 *** 作略写,我将一些代码段写成方法,方便直接调用. //根据文件名(完全路径) public byte[] SetImageToByteArray(string fileName) { FileStream fs = new FileStream(fileName, FileMode.Open)int streamLength = (int)fs.Lengthbyte[] image = new byte[streamLength]fs.Read(image, 0, streamLength)fs.Close()return image} //另外,在ASP.NET中通过FileUpload控件得到的图像文件可以通过以下方法 public byte[] SetImageToByteArray(FileUpload FileUpload1) { Stream stream = FileUpload1.PostedFile.InputStreambyte[] photo = new byte[FileUpload1.PostedFile.ContentLength]stream.Read(photo, 0, FileUpload1.PostedFile.ContentLength)stream.Close()return photo} 2.从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件 //要使用SqlDataReader要加载using System.Data.SqlClient命名空间 //将数据库中的Image类型转换成byte[] public byte[] SetImage(SqlDataReader reader) { return (byte[])reader["Image"]//Image为数据库中存放Image类型字段 } //将byte[]转换成Image图像类型 //加载以下命名空间using

我把你的代码稍微改造了下,我这边是可以显示图片的。代码如下:

数据库 *** 作部分:

package com.database

import java.io.InputStream

import java.sql.*

/**

 * @作者 王建明

 * @创建日期 13-10-7

 * @创建时间 下午12:32

 * @版本号 V 1.0

 */

public class DataBaseUtil {

public static InputStream getImageStreamFromDataBase() {

Connection conn = null

try {

Class.forName("com.mysql.jdbc.Driver")

conn =

DriverManager.getConnection("jdbc:mysql://localhost/quickstart", "root", "123456")

Statement stmt = conn.createStatement()

String sql = "select book_image from tbl_book where id=1 "

ResultSet rs = stmt.executeQuery(sql)

if (rs.next()) {

return rs.getBinaryStream("book_image")

}

} catch (Exception e) {

System.out.println("出现异常: " + e.getMessage())

} finally {

try {

if (conn != null)

conn.close()

} catch (SQLException e) {

e.printStackTrace()

}

}

return null

}

}

servlet部分:

package com.servlet

import com.database.DataBaseUtil

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import java.io.IOException

import java.io.InputStream

import java.io.OutputStream

/**

 * @作者 王建明

 * @创建日期 13-10-7

 * @创建时间 下午12:18

 * @版本号 V 1.0

 */

public class ShowImage extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response)

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

InputStream in = DataBaseUtil.getImageStreamFromDataBase()

OutputStream toClient = response.getOutputStream()

response.reset()

response.setContentType("image/jpg")//或gif

int len = 10*1024*1024

byte[] P_Buf = new byte[len]

int i

while((i = in.read(P_Buf)) != -1){

toClient.write(P_Buf, 0, i)

}

in.close()

toClient.flush()

toClient.close()

}

}

web.xml中的servlet配置:

    <servlet>

        <servlet-name>ShowImage</servlet-name>

        <servlet-class>com.servlet.ShowImage</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>ShowImage</servlet-name>

        <url-pattern>/showImage</url-pattern>

    </servlet-mapping>

页面中加载图片方式:

<img src="showImage" />

希望对你有帮助O(∩_∩)O~

第一:你查出来之后是用什么容器装的?

第二:查出来的图片编码 和网页的编码是否一致,不一致要在装容器的时候转成一致(通常是GB2312或者UTF-8)

第三:网页是否设置了 可放图片并显示


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6422846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-21
下一篇 2023-03-21

发表评论

登录后才能评论

评论列表(0条)

保存