知识大全 ASP.NET中上传文件到数据库
Posted 文件
篇首语:富贵必从勤苦得,男儿须读五车书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET中上传文件到数据库相关的知识,希望对你有一定的参考价值。
ASP.NET中上传文件到数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一 介绍为什么要将文件保存到数据库呢?理由很多 最直接的就是 将文件放入数据库以后 可以对文件进行更好的管理 特别是文本文件 图片等 如果不使用数据库 数量巨大的时候 很难做到有效的管理和区别 特别是需要作一些与文字密切相关的应用的时候 将文件全部放入数据库是最好的选择 对文字的处理 检索等 都可以直接利用数据库的一些功能 可以做到真正的有效管理 本文举例主要针对以文字为基础的文件 比如WORD等 但是 实际上对程序稍微修改 就可以上传所有文件类型
二 数据表结构
现在 我们来看存放文件的数据库表结构 这里 我们给出建立表的标准SQL语句
CREATE TABLE tblBooksUpload
(
DocID int NOT NULL IDENTITY Primary Key
DocTitle varchar ( )
Doc image
DocType varchar ( )
Entrydate datetime Default GetDate()
)
以上的语句中 我们看到数据表tblBooksUpload包含五个字段
字段DocID是表的关键字段 数据记录编号
字段DocTitle是用来简单说明上传文件的 如果上传文本文件 我们一般将其设置为文件标题 图像 程序等 就设置为图像 程序的简单介绍
字段Doc是用来存放我们上传的文件的字段 注意 这里将Doc字段的设置为Image类别
字段DocType用来保存我们上传文件的类型 可能我们奇怪为什么要这个字段呢?其实 这个字段是很重要的 在用户从数据库取得数据的时候 这个字段将用来指定数据字段Doc中数据的类别 然后 浏览器根据这个字段来决定呈现给用户的数据
字段DateTime是一个时间字段 我们可以看到该字段的值取自服务器的当前日期
下面是插入数据的存储过程 我们来看具体代码
CREATE TABLE tblBooksUpload
(
DocID int NOT NULL IDENTITY Primary Key
DocTitle varchar ( )
Doc image
DocType varchar ( )
Entrydate datetime Default GetDate()
)
三 上传文件的步骤
现在 我们先从文字上了解一下上传文件到数据库的具体步骤 再从代码上来实现
首先 从客户端取得上传的文件 然后 我们将它放入数据流
第二 服务器端读取数据流 然后将其保存到缓存
第三 将缓存数据保存到数据库
现在 我们一步步来看怎样在程序中实现这些功能
第一步
当然 首先我们要实现用户在浏览器端自由选择文件 然后上传 这里用户选择文件 当然是要求标准的Windows方式 所以 我们在这里使用Form的File文件组件来给用户选择文件 注意 因为上传文件 所以 在Form的属性设置的时候 我们应该设置为 multipart/form data 这样 才可以正确上传文件
下面是上传页面的主要代码
<form id= frmUpload method= post enctype= multipart/form data runat= server >
<span>Title</span><br>
<asp:textbox id= txtTitle runat= server EnableViewState= False ></asp:textbox>
<asp:requiredfieldvalidator id= valrTitle runat= server ErrorMessage= *
Required ControlToValidate= txtTitle >* Required</asp:requiredfieldvalidator>
<br>
<br>
<span>Docutment to Upload</span><br>
<input id= txtFileContents type= file runat= server NAME= txtFileContents >
<br>
<br>
<asp:button id= btnSubmit Text= Submit Runat= server ></asp:button>
</form>
第二步
我们可以将上传的文件通过数据流保存到缓存 缓存的大小和文件的具体大小相同 我们可以使用以下的代码来取得文件的具体大小
int intDocLen = txtFileContents PostedFile ContentLength;
然后 我们可以设置缓存的具体大小了
byte[] Docbuffer = new byte[intDoclen];
这样设置以后 我们可以将上传文件的内容保存到缓存中
Stream objStream;
objStream = txtFileContents PostedFile InputStream;
objStream Read(Docbuffer intDocLen);
在以上代码中 读取缓存的时候 从缓存的 位置开始 直到整个文件的长度 其实 这就是整个文件或者整个缓存的大小
第三步
现在我们需要做的就是将缓存数据保存到数据库 我们已经直到数据表结构 这样 我们通过编写简单的SQL语句就可以实现这个功能 在上面的内容中 我们编写了一个存储过程 在程序中 我们只要建立SqlCommand对象并且将这个存储过程传递给它 并设置 @Doc 参数取得缓存数据就可以了
cmdUploadDoc = new SqlCommand( uSP_BooksUploadFile BooksConn);
cmdUploadDoc CommandType = CommandType StoredProcedure;
cmdUploadDoc Parameters Add( @Title SqlDbType VarChar );
cmdUploadDoc Parameters Add( @Doc SqlDbType Image);
cmdUploadDoc Parameters Add( @DocType SqlDbType VarChar );
cmdUploadDoc Parameters[ ] Value = txtTitle Text;
cmdUploadDoc Parameters[ ] Value = Docbuffer;
cmdUploadDoc Parameters[ ] Value = strDocType;
点击按钮处理代码
private void btnSubmit_Click(object sender System EventArgs e)
string strDocExt;
//strDocType用于保存上传文件的类型
string strDocType;
//用于保存文件大小
int intDocLen;
//Stream用于读取上传数据
Stream objStream;
SqlConnection BooksConn;
SqlCommand cmdUploadDoc;
if(IsValid)
if(txtFileContents PostedFile != null)
//文件类型
strDocExt = CString Right
(txtFileContents PostedFile FileName ) ToLower();
switch(strDocExt)
case doc :
strDocType = doc ;
break;
case ppt :
strDocType = ppt ;
break;
case :
strDocType = ;
break;
case :
strDocType = ;
break;
case jpg :
strDocType = jpg ;
break;
case gif :
strDocType = gif ;
break;
default:
strDocType = txt ;
break;
//上传文件具体内容
intDocLen = txtFileContents PostedFile ContentLength;
byte[] Docbuffer = new byte[intDocLen];
objStream = txtFileContents PostedFile InputStream;
//文件保存到缓存
//缓存将保存到数据库
objStream Read(Docbuffer intDocLen);
BooksConn = new
SqlConnection( Server=Server;UID=sa;Database=Books );
cmdUploadDoc = new
SqlCommand( uSP_BooksUploadFile BooksConn);
cmdUploadDoc CommandType = CommandType StoredProcedure;
cmdUploadDoc Parameters Add( @Title SqlDbType VarChar );
cmdUploadDoc Parameters Add( @Doc SqlDbType Image);
cmdUploadDoc Parameters Add( @DocType SqlDbType VarChar );
cmdUploadDoc Parameters[ ] Value = txtTitle Text;
cmdUploadDoc Parameters[ ] Value = Docbuffer ;
cmdUploadDoc Parameters[ ] Value = strDocType;
BooksConn Open();
cmdUploadDoc ExecuteNonQuery();
BooksConn Close();
四 总结
cha138/Article/program/net/201311/15736相关参考
在ASP.NET中如何进行文件上传? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!上传文件的步骤:
ASP.NET中文件上传下载方法集合 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 文件的上传下
Asp.NET大文件上传组件---提取文件内容 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为
Asp.NET大文件上传开发总结(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为了提供文
Asp.NET大文件上传开发总结(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以前开发过
Asp.NET大文件上传开发总结集合 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以前开发过一
ASP.NET带进度条多文件上传 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! )解压jquer
知识大全 Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
Asp.Net无刷新文件上传并显示进度条的实现方法及思路 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
ASP.NET数据库编程之处理文件访问许可 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一个MDB
老是找不到合适的数据库上传下载的从网上找了一些代码改写了个可以直接使用的版本! 代码 AttachmentId bigint