ASP.NET实现图片以二进制的形式存入数据库
作者:shichen2014 发布时间:2024-01-25 04:32:50
标签:ASP.NET,图片,二进制,存入,数据库
本文以实例形式讲述了ASP.NET实现图片以二进制的形式存入数据库的方法。过去我们都是直接在数据库中存入图片文件名的,还没有试过存储整张图片到数据库中,经过一番资料查询与测试,整理出了如下的功能代码:
1.建立保存图片的表的SQL语句:
USE [niunantest]
GO
/****** 对象: Table [dbo].[picdata] 脚本日期: 03/30/2010 14:51:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[picdata](
[id] [int] IDENTITY(1,1) NOT NULL,
[content] [image] NULL,
[createdate] [datetime] NOT NULL CONSTRAINT [DF_picdata_createdate] DEFAULT (getdate()),
CONSTRAINT [PK_picdata] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
2.下面是保存图片到数据库中的代码片段:
int len = fu.PostedFile.ContentLength; // 图片大小
byte[] pic = new byte[len]; // 创建一个字节数组,大小为图片的大小,数据库中就存储这个东西
fu.PostedFile.InputStream.Read(pic, 0, len); // 把上传控件中的文件用二进制读取存到pic字节数组中
// 插入图片到数据库中
SqlConnection connection = new
SqlConnection(@"server=.\sqlexpress;database=niunantest;uid=sa;pwd=123456");
try
{
connection.Open();
SqlCommand cmd = new SqlCommand("insert into picdata "
+ "([content]) values (@pic)", connection);
cmd.Parameters.Add("@pic", pic);
cmd.ExecuteNonQuery();
Label1.Text = "图片插入数据库成功!";
Image1.ImageUrl = "getpic.ashx?t=" + DateTime.Now.Ticks; // 显示刚刚插入数据库的图片
}
finally
{
connection.Close();
}
3.下面是从数据库中取出图片的代码片段:
MemoryStream stream = new MemoryStream();
SqlConnection connection = new
SqlConnection(@"server=.\sqlexpress;database=niunantest;uid=sa;pwd=123456");
try
{
connection.Open();
SqlCommand command = new
SqlCommand("select top 1 [content] from picdata order by id desc", connection);
byte[] image = (byte[])command.ExecuteScalar();
stream.Write(image, 0, image.Length);
Bitmap bitmap = new Bitmap(stream);
context.Response.ContentType = "image/jpeg";
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
finally
{
connection.Close();
stream.Close();
}
程序的原理其实也就是通过流把图片搞成字节数组再存到数据库中,然后再从数据库中读取字节数组出来,再通过字节数组创建流,再通过流把图像输出出来,发现你存到数据库中的是gif图像的话再取出来是可以把他转为jpg的图像的,因为在取出图像的时候我们设置他的ContentType是image/jpeg了。


猜你喜欢
- 写一个类似linux head的小工具,在window下用。head.py # -*- coding: UTF-8 -*-#!/u
- 本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下:#encoding=utf-8#author: w
- 描述int函数可以将一个指定进制的数字型字符串或者十进制数字转化为整形。语法int(object, base)名称说明备注object一个数
- 使用 ProcessPoolExecutorfrom concurrent.futures import ProcessPoolExecut
- 本文实例讲述了Python实现对字符串的加密解密方法。分享给大家供大家参考,具体如下:需求是是要将密码存在数据库里,所以要加密解密是可逆的,
- 自己最近有在学习python,这实在是一门非常短小精悍的语言,很喜欢这种语言精悍背后又有强大函数库支撑的语言。可是刚接触不久就遇到了让人头疼
- 引言pymysqlpool (本地下载)是数据库工具包中新成员,目的是能提供一个实用的数据库连接池中间件,从而避免在应用中频繁地创建和释放数
- 前言本文实现一个 Python 脚本,用来批量卸载模拟器或者实体机上面的 App 以及清除 LogCat 缓存。开发 Android 的朋友
- PyTorch与PyTorch Geometric的安装GPU与CUDA,Python,PyTorch的匹配1. 查看Linux系统中GPU
- #!/usr/bin/env python# -*- coding: utf8 -*-import MySQLdbimport timeim
- 有一些数据我们是没法直观的查看的,需要通过抓取去获得。听到指数这个词,有的小伙伴们觉得很复杂,似乎只在股票的时候才听说的,比如一些数据的涨跌
- 前言上位机实战开发先放一放,今天来学习一个新的内容—NumPy的使用1 一维数组例:用普通方法生成一维数组num = [0 for i in
- 本文实例讲述了js控制输入框获得和失去焦点时状态显示的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html PU
- 本文实例讲述了Python通过poll实现异步IO的方法。分享给大家供大家参考。具体分析如下:在使用poll()后返回轮询对象,该对象支持以
- 众所周知,Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定。目前比较主流的Pytho
- 1.ROOT_URLCONF = '总路由所在路径(比如untitled.urls)'<===默认情况是这样根路由的路
- 由于本人经常使用笔记本共享WiFi,但是又不想笔记本开机一夜(为了低碳环保嘛 ~_~!),所以每次都要用使用DOS命令关机,感觉好麻烦。正好
- 引言最近公司换了电脑,系统也从 win7 升级到 win11,开发环境都重新安装了一遍,然后在 idea 用mvn 执行打包命令 mvn c
- LSTM简介1、RNN的梯度消失问题在过去的时间里我们学习了RNN循环神经网络,其结构示意图是这样的:其存在的最大问题是,当w1、w2、w3
- 一、安装1、安装easy_install工具wget http://peak.telecommunity.com/dist/ez_setup