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日

相关文章

  • IBM SPSS Modeler 18 Premium 中文永久破解版安装教程(破解文件)

    IBM SPSS Modeler 18 Premium 中文永久破解版安装教程(破解文件) 完整攻略 IBM SPSS Modeler 18 Premium 是一款用于数据挖掘、预测分析和决策支持的软件,国内许多用户都需要中文版,但是官方并没有提供中文版,因此有用户会选择破解版。下面我们将分享如何安装和破解 IBM SPSS Modeler 18 Premi…

    云计算 2023年5月18日
    00
  • 学习云计算从哪里入手

    学习云计算从哪里入手   1、  学习思路 a)        学习前建议先了解                         i.             什么是云计算                        ii.             云计算对当前的商业模式有什么影响                      iii.            …

    云计算 2023年4月12日
    00
  • 基于google earth engine 云计算平台的全国水体变化研究

        第一个博客密码忘记了,今天才来开通第二个博客,时间已经过去两年了,三年的硕士生涯,真的是感慨良多,最有收获的一段时光,莫过于在实验室一个人敲着代码了,研三来得到中科院深圳先进院,在这里开始了新的研究生涯,主要工作是基于google earth engine的云计算平台,遥感大数据运算,不得不说,这是一个超越国内遥感行业至少10年的东西,我记得有一个院…

    云计算 2023年4月11日
    00
  • 物联网云计算架构

    第一、软件服务(SaaS)Software-as-a-Service。软件即服务。即通过网络提供软件服务。SaaS平台供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得Saas平台供应商提供的服务。     第二、平台服务(PaaS)Platf…

    云计算 2023年4月11日
    00
  • asp.net连接数据库 增加,修改,删除,查询代码

    在 ASP.NET 中,我们可以使用 ADO.NET 来连接数据库,并实现增加、修改、删除、查询等操作。本文将深入浅析 ASP.NET 连接数据库的方法,包括连接字符串的设置、增加、修改、删除、查询等操作的代码实现,以及两个示例说明。 连接字符串的设置 在 ASP.NET 中,我们需要设置连接字符串来连接数据库。连接字符串包含了连接数据库所需的信息,例如数据…

    云计算 2023年5月16日
    00
  • SuperEdge: 使用WebAssembly扩展边缘计算场景

    作者 SuperEdge 开发者团队 概要 SuperEdge 是 一个开源的分布式边缘计算容器管理系统,用于管理多个云边区域中的计算资源和容器应用。 在当前架构中,这些资源和应用能够作为一个 Kubernetes 原生的资源进行管理。 然而在某些情况下,边缘设备通常需要一些更加轻量、性能更好的运行时。也需要减少以 GB 为单位的容器镜像,将容器的启动时间提…

    云计算 2023年4月11日
    00
  • 云计算学习初级入门教程(二) —— CentOS 6 安装 nacos 环境并配置和测试

    这篇简单了解下 Nacos,并说明下它的部署、配置和基本使用。 Nacos 官网对其说明如下: Nacos is committed to help you discover, configure, and manage your microservices. It provides a set of simple and useful features e…

    云计算 2023年4月10日
    00
  • .net core下对于附件上传下载的实现示例

    实现附件上传下载的功能一般需要考虑三个部分:前端界面展示、后端文件处理和数据存储,下面我来分享一下在 .NET Core 下实现附件上传下载的完整攻略: 前端界面展示 在前端界面,我们可以使用 <input type=”file”> 标签实现文件上传功能,同时通过表单提交的方式将文件传递给后端。这里可以借助一些前端框架来实现,例如 Bootstr…

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