title:C # 从数据库导出word文档至本地
问题描述
word文档从数据库导入导出写好后,在服务器上进行发布,发布后点击导出按钮,文档存储在服务器中,没有下载至本地。
word文档从数据库导出代码
string name = TextBox2.Text.Trim();//前台传入文件名
FileStream fs;
BinaryWriter bw;
//设定允许读取到缓冲区的最大长度
int buffersize = 100;
//要将字节流读入的缓冲区
byte[] outbyte = new byte[buffersize];
//用于记录已经读取的字节数
long reval = 1;
//字段中的索引,从这里开始读取操作
long startIndex;
//FileStream对象将封装的文件的相对路径或绝对路径
string path = "E:/" + name + ".docx";
string filePath = @"" + path + "";
string sql = "select 数据表数据字段 from 表名 WHERE Name_File = @NameFile";
SqlParameter[] _params = {
new SqlParameter("@NameFile", name)
};
SqlDataReader reader = SqlHelper.ExecuteReader(数据库链接, CommandType.Text, sql, _params);
while (reader.Read())
{
fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);
startIndex = 0;
//将字节流读入outbyte缓冲区中并返回读取的字节数
reval = reader.GetBytes(0, startIndex, outbyte, 0, buffersize);
//当读取的字节流达到缓冲区允许的最大长度时要卸载缓冲区内的数据并将数据写入文件
while (reval == buffersize)
{
bw.Write(outbyte);
bw.Flush();
//重新设定开始读取的位置,并继续读取和写数据
startIndex += buffersize;
reval = reader.GetBytes(0, startIndex, outbyte, 0, buffersize);
}
//将缓冲区内最后剩余的数据写入文件
bw.Write(outbyte, 0, (int)reval - 1);
bw.Flush();
bw.Close();
fs.Close();
}
reader.Close();
此时发布代码会将文件下载在服务器的e盘中。
根据网上从服务器下载文件的方法,在上面代码加上以下代码:
Response.ContentType = "aplication/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + name + ".docx");
Response.TransmitFile(filePath);