介绍

可能有很多的时候,我们急需把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(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中检索图片。

如何在ASP.Net 中把图片存入数据库相关推荐

  1. 如何在ASP.NET中生成HTML5离线Web应用

    传统的Web应用程序有一个很大的症结是当用户的网络连接不好时,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能.离线功能使得Web应用程序类似于本机应用程序,当断开网络连接 ...

  2. ASP.NET中的图片路径问题

    ASP.NET中的图片路径问题,相信大家都遇到过,而且很烦.比如,我们的图片路径是在根目录\images\下,在主页面我们想用里面的图片,在用户控件中我们也想用那个目录下的图片,而用户控件往往我们会把 ...

  3. asp.net应用程序_如何在ASP.NET中为聊天应用程序构建键入指示器

    asp.net应用程序 by Neo Ighodaro 由新Ighodaro 如何在ASP.NET中为聊天应用程序构建键入指示器 (How to build a typing indicator fo ...

  4. react前端显示图片_如何在react项目中引用图片?

    如何在react项目中引用图片?本文码云笔记将为大家整理在react项目中插入图片以及背景图片的方法,希望对需要的小伙伴提供一些参考. 在react项目中插入图片以及背景图片的方法共有2种: 1.im ...

  5. 解析:如何在 ASP.NET 中下载文件

    解析:如何在 ASP.NET 中下载文件 来源:博客园 作者:dotnetWalker 这是笔者常被问到的一个问题,如何通过ASP.NET来下载文件,这个问题可大可小,我们先从小的开始.当我们要让用户 ...

  6. 在PB中存图片入数据库及显示图片

    在PB中存图片入数据库及显示图片 摘自:http://www.xicc.cn/User0/109/Show.asp?/_articleid/549.html 1.选择图片 string ls_path ...

  7. python将图片存入数据库_使用python把图片存入数据库

    一般情况下我们是把图片存储在文件系统中,而只在数据库中存储文件路径的,但是有时候也会有特殊的需求:把图片二进制存入数据库. 今天我们采用的是python+mysql的方式 MYSQL 是支持把图片存入 ...

  8. 「Python-Django」django 实现将本地图片存入数据库,并能显示在web上

    1. 将图片存入数据库 关于数据库基本操作的学习,请参见这一篇博客:https://www.cnblogs.com/leejy/p/6745186.html 这里我默认,您已经会了基本操作,能在数据库 ...

  9. python把图片存放到数据库_使用Python把图片存入数据库

    一般情况下我们是把图片存储在文件系统中,而只在数据库中存储文件路径的,但是有时候也会有特殊的需求:把图片二进制存入数据库. MYSQL是支持把图片存入数据库的,也相应的有一个专门的字段BLOB(Bin ...

最新文章

  1. 没有精准定位,万物还能实现互联吗?
  2. 海康威视智能机器人泊车_干货|海康威视智能停车场管理系统(含技术指导手册+施工图)...
  3. OpenGL 平行粒子的实例
  4. vbox设置剪切板共享
  5. mysql测试什么鬼,where 1=1 是什么鬼?SQL中有这玩意?
  6. IntelliJ IDEA2021.2搭建struts2框架
  7. 张小龙:微信产品观(上)
  8. WPF 设置TextBox的输入法
  9. vue如何集成阿里云视频服务组件(aliplayer)视频功能是使用el-dialog 弹出aliplayer播放
  10. iOS开发UI篇—iPad和iPhone开发的比较
  11. 用TEXT函数解决日期用连接字符日期变成数字格式的问题
  12. aip通用文档 服务器,为 Rights Management 连接器配置服务器 - AIP | Microsoft Docs
  13. Python3.6爬取前程无忧
  14. windows平台简单的FTP服务器,无需安装
  15. VS Code 高效“摸鱼”插件推荐
  16. 17. 06-图3 六度空间 数据结构 浙江大学 拼题
  17. window修改host文件
  18. BlockCode 少儿编程软件工具 0 入门
  19. Linux下C编程入门和总结
  20. 电脑开机黑屏一串英文_电脑开机黑屏一串英文怎么办

热门文章

  1. OpenCV(实战)二值图颜色填充(彩色图形、硬币)
  2. python for i in range 三维_python中的三维卷积
  3. 在SolidWorks 3D CAD中构建乐高直升机
  4. Go 分布式学习利器(16) -- go中可复用的package构建
  5. linux文件IO与内存映射:用户空间的IO缓冲区
  6. centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数
  7. 2019年3月8日比赛(知网是什么)
  8. Https的底层原理
  9. 不同命名空间的对象二进制反序列化问题
  10. Web.Config文件配置之限制上传文件大小和时间