asp.net 实现从数据库下载文件

Mr_D 2012-04-25 11:57:16
问题:我把txt、doc等文件以二进制的形式存储到数据库,但是我在从数据库里下载后的文件却无法打开……
下载的方法在网上找到,如下:
context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
context.Response.BinaryWrite((Byte[])dr["CContent"]);
本人小白一个,高手看不惯的勿喷!
求解惑——为什么无法打开?
或者请给我一个类似的例子让我自己琢磨,谢谢!
...全文
1212 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangchangming 2012-04-28
  • 打赏
  • 举报
回复
context.Response.ContentType没有指定
兔子侠客 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
完整的例子

HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">


……
[/Quote]

这个能用 已验证
山东蓝鸟贵薪 2012-04-28
  • 打赏
  • 举报
回复
只能给你一点建议的,我的程序是用DELPHI+MSSQL2005编写的
数据库中的表是
字段名 FILENAME FILEDDD
类型 nvarchar(30) image
将文件内容以内存流方式写入FILEDDD中,读取时再以内存流方式读取并保存文件
名为FILENAME即可,再用外部的程序打开即可
孟子E章 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dc___5 的回复:]

引用 8 楼 的回复:

引用 7 楼 的回复:

引用 3 楼 的回复:

完整的例子
HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t……
[/Quote]
sql server里面是image类型

command.Parameters.AddWithValue("@Content", fileData);

不用指定SqlDbType类型
Mr_D 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

引用 3 楼 的回复:

完整的例子
HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"……
[/Quote]
那应该是我数据库里文件内容的字段类型有错吧,我在数据库应该用什么类型来保存呢?
我想问问,OLE对象在sql数据库的类型是什么?
变量@Content是SqlDbType.????类型是?
孟子E章 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 3 楼 的回复:

完整的例子
HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script run……
[/Quote]

不是实验过的代码是不给你贴的,
无法打开,可能你的 数据库字段设置问题或者你的上载方法有问题
Mr_D 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

完整的例子
HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

prot……
[/Quote]
请问你有实验过你的代码吗?因为我还是无法实现下载,下载的东西都是无法打开的。。。。。
Mr_D 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

完整的例子
HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

prot……
[/Quote]
我想问问,OLE对象在sql数据库的类型是什么?
变量@Content是SqlDbType.????类型是?
mizuho_2006 2012-04-26
  • 打赏
  • 举报
回复
数据库保存文件在服务器上的路径,安装该路径去服务器上下载文件
孟子E章 2012-04-26
  • 打赏
  • 举报
回复
完整的例子
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)
{
//得到文件数组
byte[] fileData = FileUpload1.FileBytes;
//得到文件大小
int fileLength = FileUpload1.PostedFile.ContentLength;
//得到文件名字
string fileName = System.IO.Path.GetFileName( FileUpload1.FileName);

//得到文件类型
string fileType = FileUpload1.PostedFile.ContentType;

//构建数据库连接,SQL语句,创建参数
string strCnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Image2Access.mdb";
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strCnString);
String strSql = "INSERT INTO FileTable (ContentType,Content,Title)" +
"VALUES (@ContentType,@Content,@Title)";
System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(strSql, myConnection);
command.Parameters.AddWithValue("@ContentType", fileType);
command.Parameters.AddWithValue("@Content", fileData);
command.Parameters.AddWithValue("@Title", fileName);
//打开连接,执行查询
myConnection.Open();
command.ExecuteNonQuery();
myConnection.Close();
Response.Redirect(Request.FilePath);
}

protected void Page_Load(object sender, EventArgs e)
{

//构建数据库连接,SQL语句,创建参数
string strCnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Image2Access.mdb";
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strCnString);
String strSql = "select * from FileTable";
System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(strSql, myConnection);
//打开连接,执行查询
myConnection.Open();
System.Data.OleDb.OleDbDataReader dr = command.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
myConnection.Close();
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传文件" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:HyperLinkField DataNavigateUrlFields="FileId" DataTextField="Title" DataNavigateUrlFormatString="~/Download.aspx?FileId={0}"/>
</Columns>
</asp:GridView>
</form>
</body>
</html>


DownLoad.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
String fileId = Request.QueryString["FileId"];
string strCnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Image2Access.mdb";
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strCnString);
String strSql = "select * from FileTable Where FileId=@FileId";
System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(strSql, myConnection);
command.Parameters.AddWithValue("@FileId", fileId);
//打开连接,执行查询
myConnection.Open();
System.Data.OleDb.OleDbDataReader dr = command.ExecuteReader();
if (dr.Read())
{
Response.ClearContent();
Response.ContentType = dr["ContentType"].ToString();
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(dr["Title"].ToString()));
Response.BinaryWrite((Byte[])dr["Content"]);
Response.End();
}
myConnection.Close();
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
</form>
</body>
</html>


数据库
FileId 自动编号
ContentType 文本
Content OLE 对象
Title 文本
Mr_D 2012-04-26
  • 打赏
  • 举报
回复
别让帖子沉了啊~~~~!!!

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧