求 附件下载(注明:数据库中存的不是路径)

jenny0810 2010-01-21 02:15:05
大家好:
我以前做上传附件存到数据库都是上传路径,可这是别人设计的数据库,上传附件存的二进制流吧,我也不是很懂。
现在想问的是我怎么把它下载下来。
...全文
131 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobui 2010-01-21
  • 打赏
  • 举报
回复


using (FileStream fs = File.OpenRead(sFilePath))
{
byte[] pData = ReadBuffer(fs, fs.Length);

this.Response.Buffer = true;
this.Response.Clear();

this.Response.AddHeader("content-type", "application/x-msdownload");
this.Response.AddHeader("Content-Disposition", "attachment:filename=\"" + Server.UrlEncode(sFilePath) + "\"");
this.Response.AddHeader("content-length", nSize.ToString());

Response.OutputStream.Write(pData, 0, pData.Length);
Response.Flush();
return true;
}
bxf103 2010-01-21
  • 打赏
  • 举报
回复
读取数据库内容然后生成相应文件
bxf103 2010-01-21
  • 打赏
  • 举报
回复
读取数据库内容然后生成相应文件
kiba518 2010-01-21
  • 打赏
  • 举报
回复
飘过
khjian 2010-01-21
  • 打赏
  • 举报
回复
up
jenny0810 2010-01-21
  • 打赏
  • 举报
回复
jenny0810 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zhoufoxcn 的回复:]
Response.ContentType = "application/octet-stream";//指示输出流的类型
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));//向客户端发送head头,客户端采用相关程序处理文件流
================================
这两句是少不了的。
然后从数据库中读取出流,Respons.Write到客户端,发送完成之后再关闭流对象和数据库对象就OK了。
[/Quote]
周公你好:

我的是一篇文章后面跟了两个附件或者是更多个
Response.ContentType = "application/octet-stream";//指示输出流的类型
类型就要写好几遍吗?第二个附件不会覆盖第一个吗??
我实在是不会
谢谢
周公 2010-01-21
  • 打赏
  • 举报
回复
Response.ContentType = "application/octet-stream";//指示输出流的类型
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));//向客户端发送head头,客户端采用相关程序处理文件流
================================
这两句是少不了的。
然后从数据库中读取出流,Respons.Write到客户端,发送完成之后再关闭流对象和数据库对象就OK了。
周公 2010-01-21
  • 打赏
  • 举报
回复
HTTP 文件下载主要有两种方式:
URL方式直接下载,优点是:占用服务器资源少,速度快;缺点是: 不能准确计量下载次数,无法防止盗链,保存在数据库中的文件无法下载,常见格式的文件如.html 直接在浏览器中打开,不能直接下载。
二进制数据流输出方式,优点是:准确计量下载次数、能防盗链、所有文件格式都能直接下载而不是打开、保存在数据库中等非文件数据能以文件方式下载等;缺点是占用服务器资源多。
sywcf 2010-01-21
  • 打赏
  • 举报
回复
private void DownFile(byte[] bFileContent,string strFileName,string strFileType)
{
try
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.Charset = "gb2312";
strFileName = System.Web.HttpUtility.UrlEncode( strFileName );
Response.AddHeader( "Content-Disposition" ,"attachment; filename=" + strFileName );
Response.ContentEncoding = System.Text.Encoding.GetEncoding( "gb2312" );
Response.ContentType = strFileType;
Response.BinaryWrite( bFileContent );
Response.Flush();
Response.End();

}
jenny0810 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zhoufoxcn 的回复:]
引用 8 楼 mengxj85 的回复:
要看附件的格式,要不以后无法下载,下载也无法使用
Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型      //输出图象文件二进制数制      Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);           Response.End();
图片的
其他的得自己注意一下
(string)SqlReader["ImageContentType"];//


没错。
如果存的是二进制流的话就需要知道文件流存进去之前的文件格式或者MIME,没有这个就没有办法向客户端发送head头了,没有head头客户端就不知到怎么处理了。
如果知道MIME类型,按照这种做法就可以了。
[/Quote]哦 那你的意思判断出是什么类型 客户端就知道是下载还是打开了吗??
周公 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mengxj85 的回复:]
要看附件的格式,要不以后无法下载,下载也无法使用
Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型      //输出图象文件二进制数制      Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);          Response.End();
图片的
其他的得自己注意一下
(string)SqlReader["ImageContentType"];//

[/Quote]
没错。
如果存的是二进制流的话就需要知道文件流存进去之前的文件格式或者MIME,没有这个就没有办法向客户端发送head头了,没有head头客户端就不知到怎么处理了。
如果知道MIME类型,按照这种做法就可以了。
jenny0810 2010-01-21
  • 打赏
  • 举报
回复
下载到本地
jenny0810 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mengxj85 的回复:]
要看附件的格式,要不以后无法下载,下载也无法使用
Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型      //输出图象文件二进制数制      Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);          Response.End(); 
图片的
其他的得自己注意一下
(string)SqlReader["ImageContentType"];//

[/Quote]不知道怎么下载,你的方法是能显示到页面,
如:附件1:a.txt
b.rar
主要是我怎么下载下来呢???
fangyuantdy 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vip__888 的回复:]
如果啥都有  数据库应该有对应的文件格式
然后读取 从新组成文件 就行了
[/Quote]貌似不用,
看这个吧 
http://topic.csdn.net/t/20030922/09/2285531.html
中有一个兄弟回复的
读取出来,然后判断是什么类型的,如果不是图片,就提示下载,思路给你了,剩下的自己去想想吧/。用ADO的Stream对象判断文件是什么类型的。
fangyuantdy 2010-01-21
  • 打赏
  • 举报
回复
vip__888 2010-01-21
  • 打赏
  • 举报
回复
如果啥都有 数据库应该有对应的文件格式
然后读取 从新组成文件 就行了
mengxj85 2010-01-21
  • 打赏
  • 举报
回复
要看附件的格式,要不以后无法下载,下载也无法使用
Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型 //输出图象文件二进制数制 Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]); Response.End();
图片的
其他的得自己注意一下
(string)SqlReader["ImageContentType"];//
crovax 2010-01-21
  • 打赏
  • 举报
回复
不知道。没试过
ck11926375 2010-01-21
  • 打赏
  • 举报
回复
我都是保存路径的。
顶!
加载更多回复(5)

62,254

社区成员

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

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

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

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