本文修改来源:http://www.cnblogs.com/zmgdpg/archive/2005/03/31/129758.html

效果:

数据库:

思路:

首先保存word到数据库:获取上传文件字节的大小,然后从流中读取字节,其次把获得的流保存到数据库。

读取数据库:根据名称查找出来数据库中的流数据,然后用读取器BinaryWriter读取流文件保存到指定的目录下面。

代码:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.SqlClient;
using System.Configuration; namespace WordToDB
{
public partial class WrodToDB : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } protected void btn_Click(object sender, EventArgs e)
{
/***************保存word到数据库**********/
string name = tb1.Text;
//接收上传文件
Stream fileStream = FileUpload1.PostedFile.InputStream;
//获取上传文件字节的大小
int length = FileUpload1.PostedFile.ContentLength;
byte[] wordData = new byte[length];
//从流中读取字节并写入wordData
fileStream.Read(wordData, , length);
//获取当前时间
DateTime time = DateTime.Now;
//连接数据库
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["SQLStr"].ToString();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO word (fileName,postTime,fileContent) values (@fileName,@postTime,@fileContent)";
SqlParameter nameParam = new SqlParameter("@fileName", System.Data.SqlDbType.VarChar, );
nameParam.Value = name;
cmd.Parameters.Add(nameParam);
SqlParameter timeParam = new SqlParameter("@postTime", System.Data.SqlDbType.DateTime, );
timeParam.Value = time;
cmd.Parameters.Add(timeParam);
//添加word文件
SqlParameter contentParam = new SqlParameter("@fileContent", System.Data.SqlDbType.Image);
contentParam.Value = wordData;
cmd.Parameters.Add(contentParam);
conn.Open();
int i = cmd.ExecuteNonQuery();
if (i > )
{
Response.Write("<script>alert('上传成功')</script>");
}
else
{
Response.Write("<script>alert('上传失败')</script>");
}
conn.Close();
} protected void btn1_Click(object sender, EventArgs e)
{
/****************读取数据库中的流文件**********************/
//连接数据库
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["SQLStr"].ToString();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
//根据TextBox中指定的文件名进行查找读取
cmd.CommandText = "select fileContent from word where fileName='" + tb1.Text.ToString() + "'";
FileStream fs;
BinaryWriter bw;
//设定允许读取到缓冲区的最大长度
int buffersize = ;
//要将字节流读入的缓冲区
byte[] outbyte = new byte[buffersize];
//用于记录已经读取的字节数
long reval;
//字段中的索引,从这里开始读取操作
long startIndex;
//FileStream对象将封装的文件的相对路径或绝对路径
string filePath = @"C:\" + tb1.Text + ".doc";
conn.Open();
SqlDataReader reader;
reader = cmd.ExecuteReader();
while (reader.Read())
{
fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);
startIndex = ;
//将字节流读入outbyte缓冲区中并返回读取的字节数
reval = reader.GetBytes(, startIndex, outbyte, , buffersize);
//当读取的字节流达到缓冲区允许的最大长度时要卸载缓冲区内的数据并将数据写入文件
while (reval == buffersize)
{
bw.Write(outbyte);
bw.Flush();
//重新设定开始读取的位置,并继续读取和写数据
startIndex += buffersize;
reval = reader.GetBytes(, startIndex, outbyte, , buffersize);
}
//将缓冲区内最后剩余的数据写入文件
bw.Write(outbyte, , (int)reval - );
bw.Flush();
bw.Close();
fs.Close();
}
if (reader.Read().ToString() != "")
{
Response.Write(@"<script>alert('读取成功! word的位置在:C:\\" + tb1.Text + ".doc')</script>");
}
else
{
Response.Write("<script>alert('读取失败')</script>");
}
reader.Close();
conn.Close(); }
}
}

点滴积累【C#】---C#实现上传word以流形式保存到数据库和读取数据库中的word文件。的更多相关文章

  1. 点滴积累【C#】---对上传文件的路径进行加密,以免将路径暴露在浏览器上,避免一些安全隐患!

    效果: 描述: 本事例是为解决在上传或下载文件时避免将路径暴露在外.在上传时将路径进行加密保存到DataTable或数据库中,在下载是再读取DataTable中加密数据进行解密下载. 代码: [前台代 ...

  2. Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙

    前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...

  3. Mvc Kissy uploader实现图片批量上传 附带瀑布流的照片墙

    前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...

  4. C&C控制服务的设计和侦测方法综述——DDoS攻击,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。

    这篇文章总结了一些我在安全工作里见到过的千奇百怪的C&C控制服务器的设计方法以及对应的侦测方法,在每个C&C控制服务先介绍黑帽部分即针对不同目的的C&C服务器设计方法,再介绍白 ...

  5. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解

    [图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...

  6. 让input支持 ctrl v上传粘贴图片? 让input支持QQ截图或剪切板中的图像数据(Java实现保存)

    原理:监听粘贴 → 获取粘贴内容 → 将内容上传 → 抓取后返回替换至input 我们在生产中用到的界面: 测试地址 http://sms.reyo.cn 用户名:aa 密码:123456 以下是PH ...

  7. tornado之文件上传的几种形式form,伪ajax(iframe)

    1直接form提交给后台处理 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. java接受安卓及ios App上传的图片,并保存到阿里OSS

    做后台的时候,写了两个方法,分别用来获取安卓和苹果IOS端上传的头像,保存到阿里云OSS图片存储服务器上.(SMM框架) 安卓及H5版本: /** * 上传用户头像 */ @RequestMappin ...

  9. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

随机推荐

  1. 高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存

    原文:http://blog.csdn.net/heyewu4107/article/details/71009712 高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存 问 ...

  2. android源码包下载

    http://rgruet.free.fr/public/ 其他下载地址:http://cid-b50f9d5897331c44.office.live.com/browse.aspx/Android ...

  3. mysql 碎片清理

    在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作——MySQL数据表碎片整理. 那么,为什么在使 ...

  4. HashMap、LinkedHashMap和TreeMap对比

    共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...

  5. 高性能WEB开发:Javascript自身执行效率

    Javascript中的作用域链.闭包.原型继承.eval等特性,在提供各种神奇功能的同时也带来了各种效率问题,用之不慎就会导致执行效率低下. 1.全局导入 我们在编码过程中多多少少会使用到一些全局变 ...

  6. Ftp上传文件

    package net.util.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  7. 向大家推荐两个灰常好用的插件LigerUI和报表控件highcharts

    废话不多说上一张图看看,向大家推荐两个灰常好用的插件LigerUI和报表控件highcharts.欢迎大家进技术群讨论:QQ群:15129679 http://ligerui.com/和http:// ...

  8. Android笔记——UI开发

    概述: 布局(Layout)的概念是针对Activity的,Activity就是布满整个Android设备的窗体或者悬浮于其它窗体上的交互界面.在一个应用程序中通常由多个Activity构成.每一个须 ...

  9. 如何使用angularjs实现ajax异步请求

    Sample.html <!DOCTYPE html> <html ng-app="myApp"> <head> <title>fo ...

  10. java中的super限定

    super的用法: (1)如果需要在子类中调用父类中被覆盖的实例方法,可以用super限定来调用父类中被覆盖的方法.当然,也可以调用从父类继承的实例变量. public void callOverri ...