技术开发 频道

用Sql Server存储上载图片字体


【IT168技术文档】


  在学习Asp.net开发Web应用程序的时候,我遇上这样一个问题.就是我们常见的在网站上传图片,文件之类的,这在asp.net中似乎很简单,不就一个HttpPostedFile就搞定了吗?呵呵.的确,HttpPostedFile非常方便的给我们提供了从Local to Host的HttpPostedFile类.但是我在想,可否用数据库来存储这些图片或文件呢?答案是肯定的,计算机上的任何数据都是以二进制存储的.下面本着我这两天的学习,来总结一下....

  思路:
  任何计算机上的数据都以二进制存储.我们只需将数据以二进制的形式保存到数据库即可.
  这里我们使用Sql Server数据库.用Image类型来保存二进制.

  步骤:
  1.当然是在Sql Server中建一个存储上传数据的表咯.

  id:上载数据内容的md5值确保数据库中无重复数据,可用作文件名
  data:上载文件数据
  type:文件扩展名
  length:数据长度
  time:上载时间
CREATE TABLE [picture] ( [id] [char] (32) COLLATE Chinese_PRC_CI_AS NOT NULL , [data] [image] NULL , [type] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , [length] [int] NULL , [Time] [datetime] NULL , CONSTRAINT [PK_picture] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
  2.创建一个HtmlInputFile控件对象myFile.上传的数据就是通过这个对象myFile传递进来的.它有一个重

  要属性PostedFile,它是一个HttpPostedFile对象
  PostedFile.ContentLength: 文件长度
  PostedFile.ContentType: 文件类型
  PostedFile.FileName 文件名
  PostedFile.InputStream 文件流数据
  PostedFile.Save() 将文件保入磁盘


  3.转换上载的数据和处理要写入数据库中的数据
  客户端上载的数据是以流的形式保存在HttpPostedFile对象的InputStream中.
  接下来要做的就是处理数据流,将它转换成二进制数据
//----------------转换二进制--------------------// InputStream.Seek(0,SeekOrigin.Begin); // 注意使用确保Position在开始 byte[] bdata = new byte[Length]; Data.Read(bdata,0,Length); //----------------以MD5储存ID-------------------// InputStream.Seek(0,SeekOrigin.Begin); BinaryReader br = new BinaryReader(InputStream); char[] cd = new char[Length]; cd = br.ReadChars(Length); string id = new string(cd); id = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(id,"MD5"); //---------------其它存储数据--------------------// string ExtName = PostedFile.FileName.Substring(PostedFile.FileName.LastIndexOf(".")+1) // 扩展名 string Length = PostedFile.ContentLength //文件大小
0
相关文章