ASP.NET中上传文件到数据库

2023-11-18

 

    介绍 

 

  为什么要将文件保存到数据库呢?理由很多,最直接的就是,将文件放入数据库以后,可以对文件进行更好的管理,特别是文本文件、图片等,如果不使用数据库,数量巨大的时候,很难做到有效的管理和区别。特别是需要作一些与文字密切相关的应用的时候,将文件全部放入数据库是最好的选择,对文字的处理、检索等,都可以直接利用数据库的一些功能,可以做到真正的有效管理。本文举例主要针对以文字为基础的文件,比如WORD等,但是,实际上对程序稍微修改,就可以上传所有文件类型。 

 

  数据表结构 

 

  现在,我们来看存放文件的数据库表结构,这里,我们给出建立表的标准SQL语句: 

 

  CREATE TABLE tblBooksUpload 

 

  ( 

 

  DocID int NOT NULL IDENTITY Primary Key , 

 

  DocTitle varchar (200) , 

 

  Doc image, 

 

  DocType varchar (50) , 

 

  Entrydate datetime Default GetDate() 

 

  ) 

 

  以上的语句中,我们看到数据表tblBooksUpload包含五个字段: 

 

  字段DocID是表的关键字段,数据记录编号; 

 

  字段DocTitle是用来简单说明上传文件的,如果上传文本文件,我们一般将其设置为文件标题,图像、程序等,就设置为图像、程序的简单介绍; 

 

  字段Doc是用来存放我们上传的文件的字段,注意,这里将Doc字段的设置为Image类别; 

 

  字段DocType用来保存我们上传文件的类型,可能我们奇怪为什么要这个字段呢?其实,这个字段是很重要的,在用户从数据库取得数据的时候,这个字段将用来指定数据字段Doc中数据的类别,然后,浏览器根据这个字段来决定呈现给用户的数据; 

 

  字段DateTime是一个时间字段,我们可以看到该字段的值取自服务器的当前日期。 

 

  下面是插入数据的存储过程,我们来看具体代码: 

 

  CREATE PROCEDURE uSP_BooksUploadFile 

 

  @Title varchar(200), 

 

  @Doc image, 

 

  @DocType varchar(4) 

 

  AS 

 

  INSERT tblBooksUpload(DocTitle,Doc,DocType) 

 

  VALUES (@Title,@Doc,@DocType) 

 

  GO 

 

  上传文件的步骤 

 

  现在,我们先从文字上了解一下上传文件到数据库的具体步骤,再从代码上来实现: 

 

  首先,从客户端取得上传的文件,然后,我们将它放入数据流; 

 

  第二,服务器端读取数据流,然后将其保存到缓存; 

 

  第三,将缓存数据保存到数据库; 

 

  现在,我们一步步来看怎样在程序中实现这些功能。 

 

  第一步 

 

  当然,首先我们要实现用户在浏览器端自由选择文件,然后上传,这里用户选择文件,当然是要求标准的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,0,intDocLen); 

 

  在以上代码中,读取缓存的时候,从缓存的0位置开始,直到整个文件的长度,其实,这就是整个文件或者整个缓存的大小。 

 

  第三步 

 

  现在我们需要做的就是将缓存数据保存到数据库,我们已经直到数据表结构,这样,我们通过编写简单的SQL语句就可以实现这个功能。在上面的内容中,我们编写了一个存储过程,在程序中,我们只要建立SqlCommand对象并且将这个存储过程传递给它,并设置“@Doc”参数取得缓存数据就可以了: 

 

  cmdUploadDoc = new SqlCommand("uSP_BooksUploadFile",BooksConn); 

 

  cmdUploadDoc.CommandType = CommandType.StoredProcedure; 

 

  cmdUploadDoc.Parameters.Add("@Title ",SqlDbType.VarChar,200); 

 

  cmdUploadDoc.Parameters.Add("@Doc",SqlDbType.Image); 

 

  cmdUploadDoc.Parameters.Add("@DocType",SqlDbType.VarChar,4); 

 

  cmdUploadDoc.Parameters[0].Value = txtTitle.Text; 

 

  cmdUploadDoc.Parameters[1].Value = Docbuffer; 

 

  cmdUploadDoc.Parameters[2].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,4).ToLower(); 

 

  switch(strDocExt) 

 

  { 

 

  case ".doc": 

 

  strDocType = "doc"; 

 

  break; 

 

  case ".ppt": 

 

  strDocType = "ppt"; 

 

  break; 

 

  case ".htm": 

 

  strDocType = "htm"; 

 

  break; 

 

  case ".html": 

 

  strDocType = "htm"; 

 

  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 ,0,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,200); 

 

  cmdUploadDoc.Parameters.Add("@Doc",SqlDbType.Image); 

 

  cmdUploadDoc.Parameters.Add("@DocType",SqlDbType.VarChar,4); 

 

  cmdUploadDoc.Parameters[0].Value = txtTitle.Text; 

 

  cmdUploadDoc.Parameters[1].Value = Docbuffer ; 

 

  cmdUploadDoc.Parameters[2].Value = strDocType; 

 

  BooksConn.Open(); 

 

  cmdUploadDoc.ExecuteNonQuery(); 

 

  BooksConn.Close(); 

 

  } 

 

  } 

 

  } 

 

  总结 

 

  以上我们提到的方法,适合所有类型的文件,对以上代码作适当修改,我们就可以建立一个完全基于数据库的文件管理系统。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET中上传文件到数据库 的相关文章

随机推荐

  • 解决MySQL installation error : Initializing Database安装MySQL提示initialize database报错

    解决MySQL installation error Initializing Database安装MySQL提示initialize database报错 当我们在安装MySQL数据库时 在 Initializing Database 就
  • C语言之——快速排序qsort库函数的讲解

    qsort函数C语言编译器函数库自带的排序函数 也叫快速排序函数 之前我写过一篇关于冒泡排序的代码讲解 大家感兴趣的话可以先看一看我对于冒泡排序的讲解 相比较于冒泡排序 快速排序可以用更加快捷的速度去排列升降序 它的时间复杂度只有O N l
  • 使用Vue+elementUI实现CRUD

    文章目录 前言 一 简介 二 使用Vue Cli搭建Vue项目 1 vue cli 介绍 2 axios js 介绍 3 Element Ul 介绍 4 moment js 介绍 5 搭建项目 6 添加main js配置 7 修改App v
  • Dockerfile07 -- Dockerfile构建python

    文章目录 一 Dockerfile搭建python 1 创建python目录 2 编写dockerfile文件 3 修改网站内容 一 Dockerfile搭建python 1 创建python目录 2 编写Dockerfile python
  • Wifi隔离 (AP隔离)的原理及实现

    1 wifi隔离是什么 无线隔离又称客户端隔离 client isolation 也称AP隔离 指的是阻止连接路由器的设备之间互相访问 多见于无线通信方面 常见于路由器设置中 AP隔离非常类似有线网络的VLAN 虚拟局域网 将所有的无线客户
  • 大数据—— Flink 的优化

    目录 一 Flink内存优化 1 1 Flink 内存配置 二 配置进程参数 2 1 场景 2 2 操作步骤 三 解决数据倾斜 3 1 场景描述 3 2 解决方式 3 2 1 数据源的消费不均匀 调整并发度 3 2 2 数据分布不均匀 四
  • C++11智能指针(unique_ptr、shared_ptr、weak_ptr)boost::scoped_ptr

    C 11智能指针 unique ptr shared ptr weak ptr 码农小非 的专栏 CSDN博客 c shared ptr weak ptr 原创 智能指针拾遗 原创 智能指针拾遗 qicosmos 江南 博客园 shared
  • java - 异常和断言

    什么是异常 异常就是指在程序运行的过程中发生一些不正常的时间 除0溢出 数组下标越界 所要读取的文件不存在 java的异常是Throwable派生类的一个实例 Throwable类包含在java lang中 Error类 LinkageEr
  • 论文学习笔记(7):Teacher Guided Neural Architecture Search for Face Recognition

    目录 摘要 一 介绍 二 相关工作 三 研究方法 3 1 知识蒸馏 3 2 教师网络指导下的神经网络架构搜索 3 2 1 搜索宽度 3 2 2 搜索深度 3 2 3 搜索目标 四 实验 4 1 数据集 来自AAAI2021 文章链接 htt
  • Python 类与对象、模块、异常

    类内置方法 模块 是将一组函数放在一起共享公共的主题 将其存储在一个 py文件中 使用import命令导入 Python3中部分函数 异常捕捉 try fh open testfile W fh write This is a testfi
  • Kali Linux中英文切换

    Kali linux默认为英语 可以执行以下命令切换为中文 echo LANG zh CN UTF 8 gt etc default locale 切换好 执行 reboot 重启即可 同理 切换为英文 echo LANG en US UT
  • 2022-渗透测试-OWASP TOP10详细讲解

    1 sql注入 原理 SQL 注入就是指 web 应用程序对用户输入的数据合法性没有过滤或者是判断 前端传入的参数是攻击者可以控制 并且参数带入数据库的查询 攻击者可以通过构造恶意的 sql 语句来实现对数据库的任意操作 分类 1 报错注入
  • 发小要开商场,让我给写个商场管理系统。报酬就去唱个歌?

    前言 昨天我发小喊我去唱歌 我心想还有这种好事 这铁公鸡平常一毛不拔的 居然还请我唱有陪唱的 那这咱们就拒绝不了啊 刀山火海这都得上啊 话说今天陪唱的小姐姐长的确实还不错 唱了两个小时 发小做我旁边让我帮个忙 我就知道他是无事献殷勤 那没办
  • Java-集合(List接口及其常用的实现子类)

    List接口基本介绍 1 List集合类中元素是有序的 即添加顺序和取出顺序一致 且可以重复 2 List集合类中的每个元素都有其对应的顺序索引 即支持索引 3 List容器中的元素对应一个整数型的序号 记载其在容器中的索引位置 可以根据序
  • C语言:二分法查找

    什么是二分法查找 二分法查找是通过循环平分的方式 来进行查找想要的数或数据 那么 要怎么编写这样的代码呢 首先 要把一系列的数组存入变量当中去 将其当成已知数据 比如将1 10十个数字存到变量中去 就可以写成 然后就要知道 查找数据是通过下
  • Python,使用Anaconda安装Levenshtein,出现: Failed building wheel for xxx错误

    出现原因 缺失相应的whl文件 解决办法 下载并安装对应的whl文件 点击下方链接 即可找到并下载相对应的whl文件 Unofficial Windows Binaries for Python Extension Packages 例如
  • flink学习44:基于行的操作分组和窗口的聚合

  • 华为/华三交换机配置自动备份到FTP/SFTP

    数据通信 建设篇 第一章 华为 华三交换机配置自动备份到FTP SFTP 数据通信 建设篇 下章内容 华为 华三交换机配置自动备份到FTP SFTP 背景介绍 注意事项 华为交换机配置自动备份 新华三交换机配置自动备份 参考来源 下章内容
  • Syslog日志服务器配置 For CentOS 7.8(Syslog+LogAnalyzer+LAMP)

    声明 本教程仅供学习 研究 测试使用 本文作者不承担任何法律责任 本次中央日志服务器采用rsyslog提供日志接收服务 Mariadb作为后端数据库提供日志存储服务 一 安装CentOS 7操作系统 1 CentOS7的操作系统安装过程本文
  • ASP.NET中上传文件到数据库

    介绍 为什么要将文件保存到数据库呢 理由很多 最直接的就是 将文件放入数据库以后 可以对文件进行更好的管理 特别是文本文件 图片等 如果不使用数据库 数量巨大的时候 很难做到有效的管理和区别 特别是需要作一些与文字密切相关的应用的时候 将文