asp.net实现存储和读取数据库图片

实现存储和读取数据库图片的完整攻略需要以下步骤:

  1. 创建数据库表格

需要创建一个数据库表来存储图片,这个表至少需要包含以下两个字段:

  • ImageId:图片ID,为主键自增长;
  • ImageData:图片二进制数据,以byte[]类型存储。

例如:

CREATE TABLE [dbo].[Images] (
  [ImageId] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
  [ImageData] VARBINARY(MAX) NOT NULL
)
  1. 编写asp.net页面

页面需要包含两个页面,分别是上传页面和展示页面。

2.1 上传页面

上传页面需要包含以下步骤:

  • 创建上传表单;
  • 在上传表单中使用 input:file元素,允许用户选择要上传的图片;
  • 当用户点击提交按钮时,将图片数据以二进制形式传递给服务器。

例如:

<form action="/upload" method="POST" enctype="multipart/form-data">
  <input type="file" name="image">
  <button type="submit">上传图片</button>
</form>

2.2 展示页面

展示页面需要从数据库中读取图片数据,并将其显示在页面上。

例如:

var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    var command = new SqlCommand("SELECT ImageData FROM Images WHERE ImageId = @ImageId", connection);
    command.Parameters.AddWithValue("@ImageId", imageId);
    using (var reader = command.ExecuteReader())
    {
        if (reader.Read())
        {
            var imageData = (byte[])reader["ImageData"];
            Response.ContentType = "image/jpeg";
            Response.BinaryWrite(imageData);
        }
    }
}

以上代码会生成一个HTTP响应,其中文件类型为JPEG,文件内容为读取自数据库的图片数据(byte[])。

示例1:

我们可以使用System.Drawing库将图片数据转换为图片对象(pictureBox)。添加以下代码将图片显示在上传页面上。

if (Request.Files.Count > 0)
{
    var file = Request.Files[0];
    var fileName = Path.GetFileName(file.FileName);
    var imageData = new byte[file.InputStream.Length];
    file.InputStream.Read(imageData, 0, imageData.Length);

    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();
        var command = new SqlCommand("INSERT INTO Images (ImageData) VALUES (@ImageData); SELECT CAST(scope_identity() AS int)", connection);
        command.Parameters.AddWithValue("@ImageData", imageData);
        var imageId = (int)command.ExecuteScalar();

        using (var memoryStream = new MemoryStream(imageData))
        {
            var image = Image.FromStream(memoryStream);
            pictureBox.Image = image;
        }
    }
}

示例2:

我们可以使用Gridview控制在展示页面上展示多个图片。

protected void Page_Load(object sender, EventArgs e)
{
    var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();
        var command = new SqlCommand("SELECT ImageId FROM Images", connection);
        using (var reader = command.ExecuteReader())
        {
            var imageIds = new List<int>();
            while (reader.Read())
            {
                imageIds.Add((int)reader["ImageId"]);
            }
            GridView1.DataSource = imageIds;
            GridView1.DataBind();
        }
    }
}

在GridView的TemplateField当中嵌入控件,如下代码

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Image ID="Image1" runat="server" ImageUrl='<%# "/ImageHandler.ashx?ImageId=" + Eval("ImageId") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

并且需要添加一个HttpHandler(ashx)用于将图片数据以二进制形式传递给客户端。

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var imageId = int.Parse(context.Request.QueryString["ImageId"]);

        var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var command = new SqlCommand("SELECT ImageData FROM Images WHERE ImageId = @ImageId", connection);
            command.Parameters.AddWithValue("@ImageId", imageId);
            using (var reader = command.ExecuteReader())
            {
                if (reader.Read())
                {
                    var imageData = (byte[])reader["ImageData"];
                    context.Response.ContentType = "image/jpeg";
                    context.Response.BinaryWrite(imageData);
                }
            }
        }
    }

    public bool IsReusable => false;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net实现存储和读取数据库图片 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 云计算信任危机下的不安

    云计算已经成为当下最火的信息技术,毫不夸张地说云计算引领了一场信息技术革命,将有可能改变人们未来的生活方式,云计算给人们工作和生活提供了美好的愿景。当前,云计算正从概念炒作的初级阶段转向落地和务实阶段,然而,随着云计算闯入人们的生活,甚至是涉及隐私的部分,引起了人们的高度恐慌。我们知道,大家平时用水、用电从来都不会有这种感受,打开阀门水就来了,只要持续缴费就…

    云计算 2023年4月13日
    00
  • 华为平板电脑哪款最好2023

    华为平板电脑哪款最好2023 如果你正在考虑购买一款华为平板电脑,那么可能会被琳琅满目的选择吓到。为了帮助你找到最适合的平板电脑,下面提供了一些选择的建议和将要关注的关键要素。 如何选择最好的华为平板电脑 当考虑购买平板电脑时,以下几个因素是需要考虑的: 1. 大小和重量 这是选择平板电脑最重要的因素之一。有三种主要的屏幕尺寸:8英寸,10英寸和12英寸。8…

    云计算 2023年5月17日
    00
  • 专家解读:如何选择负载均衡设备?

    负载均衡设备是现代网络架构中不可或缺的一部分,它可以帮助企业实现高可用性、高性能和高可扩展性的应用程序。但是,如何选择适合自己企业的负载均衡设备呢?本文将为您提供详细的攻略。 1. 确定负载均衡设备的需求 在选择负载均衡设备之前,需要先确定自己的需求。具体来说,需要考虑以下几个方面: 预期的流量负载 应用程序的类型和特点 高可用性和容错性的需求 安全性和可管…

    云计算 2023年5月16日
    00
  • 一文学会Hadoop与Spark等大数据框架知识

    一文学会Hadoop与Spark等大数据框架知识 对于想要入门大数据领域的人来说,Hadoop和Spark这两个大数据框架是不可或缺的。本文将介绍如何从零开始学习Hadoop和Spark,并提供一些示例以帮助读者更好地理解。 Hadoop学习攻略 1. 安装和配置 首先需要安装Hadoop,可以从官网或其他可靠网站下载。安装完后,需要进行配置才能使用。主要包…

    云计算 2023年5月18日
    00
  • 解析python实现Lasso回归

    最初在进行Lasso回归时,一般会通过sklearn库进行实现。但是,了解其内部的Python实现对于掌握Lasso回归建模和算法的原理和特性非常有帮助。下面给出了一个Python实现的Lasso回归建模过程。 步骤一:加载数据 import numpy as np def load_data(): # 加载数据集 data = np.loadtxt(&qu…

    云计算 2023年5月18日
    00
  • 如何实现云数据治理中的数据安全?

    云计算被定义为计算资源的共享池,已经在不同的应用领域广泛部署和使用。在云计算中,数据治理在提高整体性能和确保数据安全方面发挥着至关重要的作用。本研究从管理和技术应用两方面探讨如何实现云数据治理中的数据 作者:京东科技 李然辉 摘要 云计算被定义为计算资源的共享池,已经在不同的应用领域广泛部署和使用。在云计算中,数据治理在提高整体性能和确保数据安全方面发挥着至…

    2023年4月10日
    00
  • 国际国内云计算发展现状及未来前景

    一、“云计算”概述         云计算(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展。        (一)云计算的基本原理。通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行…

    云计算 2023年4月12日
    00
  • 云计算–网络原理与应用–20171116—交换机原理与配置

    一 数据链路层   1.数据链路层的作用包括数据链路的建立,维护与拆除,把数据封装在帧中,按顺序发送。   2.MAC地址由48位2进制组成,通常显示12位16进制数,前24位为厂商编号,后24位为网卡序列号;   3. 以太网帧格式: 目的MAC地址,6字节; 源MAC地址,6字节; 类型:2字节。用来标识上层协议类型,0800位ip协议,0806位arp…

    云计算 2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部