当前位置:首页 > 行业动态 > 正文

如何在ASP中显示数据库中的二进制图片?

在 ASP 中显示数据库中的二进制图片,可以使用 Response.BinaryWrite 方法将二进制数据写入响应流。从 数据库中检索图片的二进制数据,然后使用该方法将其输出到客户端。

在现代Web开发中,处理和显示数据库中的二进制图片是一项常见需求,对于使用ASP(Active Server Pages)的开发者来说,实现这一功能需要一定的技巧和步骤,本文将详细介绍如何在ASP中读取数据库中的二进制图片数据,并在网页上显示这些图片。

数据库设计

我们需要设计一个数据库表来存储图片的二进制数据,假设我们使用的是SQL Server数据库,可以创建如下的表结构:

CREATE TABLE Images (
    ImageID INT PRIMARY KEY IDENTITY(1,1),
    ImageName NVARCHAR(255) NOT NULL,
    ImageData VARBINARY(MAX) NOT NULL
);

ImageID 是图片的唯一标识符。

ImageName 是图片的名称或描述。

ImageData 用于存储图片的二进制数据。

插入图片数据

我们需要将图片插入到数据库中,可以使用SQL Server Management Studio(SSMS)或其他工具来完成这一步,以下是一个简单的示例代码,演示如何使用ASP将图片插入到数据库中:

<%
Dim uploadPath
uploadPath = Server.MapPath("uploads/")
' 获取上传的文件名
Dim fileName
fileName = Request.Form("filename")
' 打开文件并读取内容
Dim binaryStream
Set binaryStream = CreateObject("ADODB.Stream")
binaryStream.Type = 1 ' adTypeBinary
binaryStream.Open
binaryStream.LoadFromFile uploadPath & fileName
' 连接到数据库
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Provider = "sqloledb"
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=your_server_name;Initial Catalog=your_database_name;User ID=your_username;Password=your_password;"
conn.Open
' 创建命令对象
Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO Images (ImageName, ImageData) VALUES (@ImageName, @ImageData)"
cmd.Parameters.Append cmd.CreateParameter("@ImageName", adVarChar, adParamInput, 255, fileName)
cmd.Parameters.Append cmd.CreateParameter("@ImageData", adLongVarBinary, adParamInput, , binaryStream.Read)
' 执行命令
cmd.Execute
' 关闭连接
conn.Close
Set conn = Nothing
Set cmd = Nothing
Set binaryStream = Nothing
%>

读取并显示图片

我们需要从数据库中读取图片数据并在网页上显示,以下是一个完整的ASP页面示例,演示如何实现这一功能:

<%
' 连接到数据库
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Provider = "sqloledb"
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=your_server_name;Initial Catalog=your_database_name;User ID=your_username;Password=your_password;"
conn.Open
' 获取要显示的图片ID
Dim imageID
imageID = Request.QueryString("id")
' 创建命令对象
Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT ImageData FROM Images WHERE ImageID = ?"
cmd.Parameters.Append cmd.CreateParameter("@ImageID", adInteger, adParamInput, , imageID)
' 执行命令并获取结果集
Dim rs
Set rs = cmd.Execute
' 如果找到图片,则输出其内容类型和二进制数据
If Not rs.EOF Then
    Response.ContentType = "image/jpeg" ' 根据实际图片类型设置正确的MIME类型
    Response.BinaryWrite rs("ImageData").GetChunk(1)
Else
    Response.Write "No image found with the specified ID."
End If
' 关闭连接和清理资源
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
Set cmd = Nothing
%>

4. 完整示例:结合HTML表单上传图片并显示

为了更全面地展示整个过程,我们可以创建一个包含HTML表单的ASP页面,允许用户上传图片并将其保存到数据库中,然后在另一个页面上显示这些图片,以下是完整的示例代码:

上传图片页面(upload.asp)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload Image</title>
</head>
<body>
    <h2>Upload an Image</h2>
    <form action="upload_process.asp" method="post" enctype="multipart/form-data">
        <label for="filename">Choose an image:</label>
        <input type="file" name="filename" id="filename"><br><br>
        <input type="submit" value="Upload">
    </form>
</body>
</html>

处理上传并保存到数据库的页面(upload_process.asp

<%
Dim uploadPath
uploadPath = Server.MapPath("uploads/")
' 获取上传的文件名
Dim fileName
fileName = Request.Form("filename")
' 确保文件名不为空且文件已上传
If Len(fileName) > 0 And Request.TotalBytes > 0 Then
    ' 检查文件扩展名是否合法(仅允许JPEG、PNG等格式)
    Dim ext
    ext = LCase(Right(fileName, Len(fileName) InStrRev(fileName, ".")))
    If ext <> "jpg" And ext <> "jpeg" And ext <> "png" And ext <> "gif" Then
        Response.Write "Invalid file type."
        Response.End()
    End If
    
    ' 移动文件到服务器上的临时目录
    Dim tempFilePath
    tempFilePath = uploadPath & fileName
    On Error Resume Next ' 忽略错误,如果文件已存在则覆盖它
    Request.Form("filename").SaveAs tempFilePath
    If Err.Number <> 0 Then
        Response.Write "Error saving file."
        Response.End()
    End If
    Err.Clear ' 清除错误状态
    
    ' 打开文件并读取内容
    Dim binaryStream
    Set binaryStream = CreateObject("ADODB.Stream")
    binaryStream.Type = 1 ' adTypeBinary
    binaryStream.Open
    binaryStream.LoadFromFile tempFilePath
    
    ' 连接到数据库
    Dim conn
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Provider = "sqloledb"
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=your_server_name;Initial Catalog=your_database_name;User ID=your_username;Password=your_password;"
    conn.Open
    
    ' 创建命令对象
    Dim cmd
    Set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = conn
    cmd.CommandText = "INSERT INTO Images (ImageName, ImageData) VALUES (@ImageName, @ImageData)"
    cmd.Parameters.Append cmd.CreateParameter("@ImageName", adVarChar, adParamInput, 255, fileName)
    cmd.Parameters.Append cmd.CreateParameter("@ImageData", adLongVarBinary, adParamInput, , binaryStream.Read)
    
    ' 执行命令
    cmd.Execute
    Response.Redirect("view_images.asp") ' 重定向到查看图片的页面
    
    ' 关闭连接和清理资源
    conn.Close
    Set conn = Nothing
    Set cmd = Nothing
    Set binaryStream = Nothing
Else
    Response.Write "Please select a file to upload."
End If
%>

查看图片页面(view_images.asp)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Images</title>
</head>
<body>
    <h2>View Images from Database</h2>
    <table border="1">
        <tr>
            <th>Image Name</th>
            <th>Image</th>
        </tr>
        <%
        ' 连接到数据库
        Dim conn
        Set conn = Server.CreateObject("ADODB.Connection")
        conn.Provider = "sqloledb"
        conn.ConnectionString = "Provider=SQLOLEDB;Data Source=your_server_name;Initial Catalog=your_database_name;User ID=your_username;Password=your_password;"
        conn.Open
        
        ' 创建命令对象以获取所有图片信息
        Dim cmd, rs, imageID, imageName, imageData, contentType, mimeTypes, mimeType, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, aa, bb, cc, dd, ee, ff, gg, hh, ii, jj, kk, ll, mm, nn, oo, pp, qq, rr, ss, tt, uu, vv, ww, xx, yy, zz, aaa, bbb, cccc, ddd, eee, ffff, ggg, hhhhh, iiiii, jjjjj, kkkkk, lllll, mmmmm, nnnnn, ooooo, ppppp, qqqqq, rrrrr, sssss, ttttt, uuuuu, vvvvv, wwww, xxxx, yyyyy, zzzzz" ' 这是一个很长的列表,只是为了填充表格单元格,没有实际意义,您可以根据需要调整或删除这些值。
        Set cmd = Server.CreateObject("ADODB.Command")
        cmd.ActiveConnection = conn
        cmd.CommandText = "SELECT ImageID, ImageName FROM Images" ' 只选择必要的字段以减少数据传输量
        Set rs = cmd.Execute
        
        ' 遍历结果集并显示每张图片的信息和缩略图(如果有)
        Do While Not rs.EOF
            imageID = rs("ImageID")
            imageName = rs("ImageName") %>><tr>% Response.Write "<td>" & imageName & "</td><td><img src='show_image.asp?id=" & imageID & "' alt='" & imageName & "' width='100' height='100'></td></tr><%" %> Do While rs.MoveNext() %> %> Response.Write "</tr></table>" %> Response.Write "</table>" %> Response.Write "</body>" % Response.Write "</html>" %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> %> >" Response.Write "</table></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html></body></html><hr /><p><strong><em>(注: 以上代码仅为示例,请根据实际情况进行调整和完善,特别是数据库连接字符串中的服务器名称、数据库名称、用户名和密码需要根据您的实际情况进行替换。)</em><br /></p><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><hr /><br /></p><br /></p><br/>

以上就是关于“asp 显示数据库二进制图片”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

0