首页 新闻 会员 周边

c# 流的方式下载文件

-1
[已解决问题] 解决于 2012-08-29 17:30

因为下载的同时要更新数据库的信息,所以直接写在超链接里就不行了.

用window.openIE有的 版本还不支持.

后来想到用一个aspx页面后台处理下载,

用流的方式,但有一个问题是 要下载的文件和网站不在同一机器.地址是类似http://...../a.zip

这样的话,FileStream似乎不支持网络路径.

代码如下:

  string fileName = strName;//客户端保存的文件名
        string filePath = "http://.....//a.zip";//路径
        //以字符流的形式下载文件
        FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate,FileAccess.Write);
        byte[] bytes = new byte[(int)fs.Length];
        fs.Read(bytes, 0, bytes.Length);
        fs.Close();      
        Response.ContentType = "application/octet-stream";
        //通知浏览器下载文件而不是打开
        Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
        Response.BinaryWrite(bytes);
        Response.Flush();
        Response.End();

怎么办,有什么好办法.

自由VIVE的主页 自由VIVE | 初学一级 | 园豆:4
提问于:2012-07-30 17:38
< >
分享
最佳答案
0

用WebClient访问 http://...../a.zip

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2012-07-30 17:48

用这个我也试了,可是我这个用来做下载连接用的.它似乎不提示保存对话框

自由VIVE | 园豆:4 (初学一级) | 2012-07-30 18:01

@自由VIVE: 你得区分在服务端运行和在客户端运行的差别,如果你想让客户端出现保存的对话框,你应该使用超链接的方式将你的文件URI嵌入在网页中。

Launcher | 园豆:45045 (高人七级) | 2012-07-31 09:22

@程序猿.码农: 1,如果用超链接<a  href='a.zip'>这样写的话我还需要执行另外一个后台方法.   不知道怎么写.

2,如果是<a href='xxx.aspx'>然后在xxx.aspx的Load里面写处理(目前我就是这样的).

3,另外我请教您一下,用流的方式下载 和用超链接有什么大的本质上的区别.

如果用1,那种方式,能实现我另外执行一段代码的话那就再好不过了,是因为1那样我不会所以才用的2的方式,

请指教.

我qq  1198918404  如果方便的话  加一下好友,不方便也没有关系

自由VIVE | 园豆:4 (初学一级) | 2012-07-31 10:08
其他回答(2)
0

你好请问下,后面你这个下载问题怎么解决的呢?

shenghao | 园豆:202 (菜鸟二级) | 2015-07-06 20:18
0

很好解决啊:在前台加个

<form id="attachmentForm" method="POST">

</form>

然后这样:

$('#attachmentForm').attr('action', '/AjaxTerminalInfo/DownloadAttachment.cspx?filepath=' + row[i].FilePath + "&filename=" + row[i].FileName);
$('#attachmentForm').submit();

Seaurl | 园豆:5 (初学一级) | 2016-01-26 16:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册