如何在ASP.Net 中把图片存入数据库
可能有很多的时候,我们急需把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。
在这篇文章中我们可以学到以下几个方面的知识:
1. 插入图片的必要条件
2. 使用流对象
3. 查找准备上传的图片的大小和类型
4.怎么使用InputStream方法?
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#Form 标记的 enctype 属性应该设置成 enctype="multipart/form-data"
# 需要一个<input type=file>表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象
把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。
# 需要至少含有一个图片类型的字段的表
# 如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。
现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有<input type=file>标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的Onclick事件里,我们需要读取选取图片的内容,然后把它存入到表里。那我们先来看看这个Onclick事件。
提交按钮的Onclick事件的代码:
Dim intImageSize As Int64
Dim strImageType As String
Dim ImageStream As Stream
' Gets the Size of the Image
intImageSize = PersonImage.PostedFile.ContentLength
' Gets the Image Type
strImageType = PersonImage.PostedFile.ContentType
' Reads the Image
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent(intImageSize) As Byte
Dim intStatus As Integer
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
' Create Instance of Connection and Command Object
Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim myCommand As New SqlCommand("sp_person_isp", myConnection)
' Mark the Command as a SPROC
myCommand.CommandType = CommandType.StoredProcedure
' Add Parameters to SPROC
Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)
prmPersonImage.Value = ImageContent
myCommand.Parameters.Add(prmPersonImage)
Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
prmPersonImageType.Value = strImageType
myCommand.Parameters.Add(prmPersonImageType)
Try
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
Response.Write("New person successfully added!")
Catch SQLexc As SqlException
Response.Write("Insert Failed. Error Details are: " & SQLexc.ToString())
End Try
这是怎么工作的呢?
PersonImage是HTMLInputFile控件的对象。首先需要获得图片的大小,可以使用下面的代码实现:
intImageSize = PersonImage.PostedFile.ContentLength
然后返回图片的类型使用ContenType属性。最后,也是最重要的事就是取得Image Stream,这可以用以下代码实现:
ImageStream = PersonImage.PostedFile.InputStream
我们需要一个字节型数组来存储image 内容。读取整个图片可以使用Stream对象的Read方法来实现。Read(in byte[] buffer,int offset,int count)方法有三个参数。【关于Read方法的详细可以参看.Net FrameWorkSDK】他们是:
buffer
字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count) 之间的值由从当前源中读取的字节替换。
offset
buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。
count
要从当前流中最多读取的字节数。
这个Read方法用以下代码实现:
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
.
现在,我们已经读取了整个图片的内容,下一步,我们要把这些内容存入到sql 表。我们将使用存储过程来完成插入图片类型和图片内容到sql 表。如果你浏览了上面的代码,你将会发现我们使用了sqldbtype.image的数据类型(datatype)。Ok了,完成了这些,我们也就成功的把图片存入到SqlServer中了。下面是我们编写的aspx页面。
结论
我们已经讨论了如何把图片存入到Sql Server,那么我们如何从SqlServer中读取图片呢?可以参看我的另一篇文章:在Asp.Net中从SqlServer中检索图片。
相关文章:
人类偏好的“可塑性”,从博弈说起
作者 | 斯图尔特罗素来源 | 《AI新生》出品 | AI科技大本营经济学家通过为人类受试者提供选择来套取他们的偏好。该技术广泛应用于产品设计、营销和交互式电子商务系统中。例如,汽车设计师向受测试者提供具有不同油漆颜色、座位安排、后备厢大小、电池容量、杯架等选…

基于python的一个运维自动化的项目(进度更新)【已开源】
文章已经转到 http://xiaorui.cc 个人博客里,欢迎浏览 !!!交流Python & Golang 可以加群 278517979 .

关于Android方法数量限制的问题
限制Android方法数量的原因是: Android应用以DEX文件的形式存储字节码文件,在Dalvik字节码规范里,方法引用索引method referenceindex只有16位,即65536个。 Op & Format Mnemonic / Syntax Arguments 6e..72 35c invoke-kind {vC, vD…

asp.net中显示DataGrid控件列序号的几种方法
在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值计算方式如下ÿ…
一口气看完45个寄存器,CPU核心技术大揭秘
作者 | 轩辕之风O来源 | 编程技术宇宙头图 | CSDN下载自视觉中国自1946年冯诺伊曼领导下诞生的世界上第一台通用电子计算机ENIAC至今,计算机技术已经发展了七十多载。从当初专用于数学计算的庞然大物,到后来大型机服务器时代,从个人微机技术蓬…

用友公司Java面试题(含答案)
为什么80%的码农都做不了架构师?>>> 用友公司Java面试题(含答案) 1.Hashtable和HashMap有什么区别? a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自AbstractMap类同时是Java 1.2引进的Map接口…

使用memcache做web缓存
为什么80%的码农都做不了架构师?>>> 下载: memcached server [密码: vTI8, 安装启动和调用, 内部有说明] 下载: python-memcached 1.57 现在准备用web.py写个网站, 缓存这块一直没想好用哪个, 今天终于想好了, 直接用memcache # coding: utf-8import me…

Asp.net中DataGrid控件的自定义分页
使用实现起来虽然比较方便,但是效率不高,每次都需要读取所有页(整个记录集),而加载的只是其中一页,造成了资源的浪费,记录多又会使效率变得很低。下面通过DataGrid的自定义分页功能来减少资源使…

实战:在Windows Server2008上配置NLB
1.1 在Windows Server2008上配置NLB 试验环境: DCServer是ESS.COM域的域控制器。 Fileserver和Research属于ESS.COM域,安装有Windows Server 2008企业版。 Sales计算机是ESS.COM域的成员,安装Vista企业版。 试验要求: 实现FileSer…
无人驾驶矿山赛道单笔最大融资:踏歌智行完成2亿元B轮融资
10月30日,矿山无人驾驶运输企业踏歌智行完成了2亿元的B轮融资,本轮融资由前海母基金和宝通投资共同领投,清研资本、蓝焱资本等跟投。踏歌智行继2019年连续完成三轮融资后,再创行业新高。据了解,踏歌智行2019年签订了超…

Python加密—RSA加密
为什么80%的码农都做不了架构师?>>> 公钥加密,私钥解密。 import rsa import base64 from Crypto.PublicKey import RSA # RSA加密解密pubkey -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcB4zYqi3mjdP3E2f9jyPuF0X…

在asp.net中为Web用户控件添加属性和事件
在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程。它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术&#x…
1024 鲲鹏开发者技术沙龙·福州站圆满收官!给程序员的福利你收到了吗?
10月24日,由华为技术有限公司与福建鲲鹏生态创新中心联合主办的“1024鲲鹏开发者技术沙龙”在福州顺利举行。在沙龙上,来自福建鲲鹏生态创新中心运营总监宋宗佑为活动进行致辞,福建鲲鹏生态创新中心生态总监朱晓彤对鲲鹏生态创业中心进行介绍…

IPsec ××× 配置實例
試驗top:ipsec ***的配置包括一下幾個步驟:1.配置ike的協商2.配置ipsec的協商3.配置端口的應用4ike的調試和排錯按照步驟建立ike 的協商策略和參數R1<config>#crypto isakmp policy 編號<1-10000>編號越低優先級越高#hash { md5 | sha1 } 此命令表明設置密匙認…

springMVC参数绑定与数据回显
简单例子:修改商品信息的jsp页面: 参数绑定过程: 1.2.1 默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值。 1.1.1 HttpServletRequest 通过request对象获取请求信息 1.1.2 HttpServletResponse 通…

使用Qt编写模块化插件式应用程序
动态链接库技术使软件工程师们兽血沸腾,它使得应用系统(程序)可以以二进制模块的形式灵活地组建起来。比起源码级别的模块化,二进制级别的模块划分使得各模块更加独立,各模块可以分别编译和链接,模块的升级…

datagrid的正反双向排序
在asp.net中利用datagrid控件按列进行排序很是方便。可是我们只能单项排序!如果我们需要正反排序那么就需要加入一些代码控制一下。 首先我们需要将datagird控件的属性设置为 AllowSorting"True",且需要排序列需要制定排序表达式 eg: SortExpr…
比Python 3.8快20%,Pyston v2正式发布
作者 | 写代码的明哥来源 | Python编程时光头图 | CSDN付费下载于视觉中国Pyston 自从 2017 年发布 0.6.1 版本后,已经淡出了人们的视线三年多了,导致现在新人都很少听过它的大名。前两天(2020年10月28日)Pyston 在官方博客上&…

基于Netty实现的轻量级分布式服务框架
对分布式技术比较感兴趣,于是在闲暇时间写了一个简单的RPC框架娱乐一下,项目持续更新中...... GitHub项目地址: Pudding 如果感觉Pudding对你有帮助可以顺手点个Star哦......哈哈 直接看一下示例代码吧 第一步: 启动注册中心 public class RegistryTest…

在分页状态下删除纪录的问题
在使用DataGrid分页的时候,正常情况下,绑定数据库列表纪录时会自动产生分页的效果,然而我发觉在删除纪录的时候总会发生"无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。"的异常,其实解决这个问题很简…
老码农90%的程序猿都是瞎努力,这份路线教你成为高手!
数据正在变得越来越常见,小到我们每个人的社交网络、消费信息、运动轨迹……,大到企业的销售、运营数据,产品的生产数据,交通网络数据……如何从海量数据中获得别人看不见的知识,如何利用数据来武装营销工作、优化产品…

android 365手机秘书源代码
2019独角兽企业重金招聘Python工程师标准>>> 应用到的知识还算挺多的,网络编程,xml解析,通知,广播,联系人,服务等,希望对新手有帮助 运行环境: 在android 2.3.3 运行…

centos安装及网络配置
感谢老师传授,共同学习!谢谢!仅供自己日后复习之用!centos安装关键点:创建分区:/ 系统分区/boot 启动分区SWAP 交换分区,虚拟内存。主要是缓解物理内存不足。虚拟化软件:VMware work…

使用DataGrid动态绑定DropDownList
简单的使用模板列绑定DropDownList,初学者想必都会了,但有时候,我们要做的就是在编辑的时候想让某一列定制为DropDownList,并且根据正常情况下显示的值自动变换DropDownList中所选的值,然后保存选择后的值到数据库或XM…
隐私数据在隐私AI框架中的安全流动
作者 | Rosetta技术团队责编 | 晋兆雨出品 | AI科技大本营本文中,我们将介绍为了保护用户的隐私数据,在隐私 AI 框架的计算任务全流程中,数据是如何以密文形式流动,同时仍正确完成加法、乘法等计算步骤的。隐私 AI 系统存在的目…

MS Sql Server 作业编辑报错以及不显示历史记录
如下图: 解决方法: 1.开始->运行,输入dcomcnfg.exe 2.打开组件服务器->计算机->我的电脑->DCOM配置; 3.找到Microsoft Office Excel或者Microsoft Office Word点击右键->属性 4.选择安全,将启动和激活权…

基于Guava实现的文件复制
需求:现需要将文件D:\A\B\C\abc.txt进行一下操作 1.在文件夹D:\A\B\C下,没有以abc命名的文件夹则创建 2.将目标文件D:\A\B\C\abc.txt复制到abc下 实现代码: /*** 以目标文件名创建文件夹,并将目标文件复制到该文件夹下** param sr…
破局传统算法痛点,腾讯安全首提基于跨模态检索的二进制代码-源代码匹配
整理 | 高卫华出品 | AI科技大本营头图 | CSDN付费下载自视觉中国近日,在NeurIPS 2020正式发布的论文入选名单中,腾讯安全科恩实验室聚焦解决二进制安全问题的《CodeCMR: Cross-Modal Retrieval For Function-Level Binary Source Code Matching》&#…

DataGrid删除确认及Item颜色交替
有时候我们需要在删除DataGrid中Item相对应的数据时,需要弹出一个确认对话框来提示使用者,其实这个功能非常简单,下面的代码可以在DataGrid的Item 中产生颜色交替的效果。 private void dg_ItemDataBound(object sender, DataGridItemEve…

SharePoint 2010 自定义日志
7/6/2012 How to log to the SharePoint ULS Logs(Clean Debugging and Error Logging broken down into steps) By: Philip Stathis 原文地址 http://www.thesharepointblog.net/Lists/Posts/Post.aspx?ID122 This article is meant to introduce a simple error logging rou…