前景提要
C#关于从客户端下载文件的问题
0 悬赏园豆: 10 [待解决问题] 我现在做的这个网站是B/S模式的,客户向服务器A发出下载请求,服务器A去服务器B查找文件下载,我想做的是下载到客户电脑本地上,可是却是下载到了服务器A上面,求大神指点
string url = " http://192.168.8.38/C/图片/logo.png ";//这个是服务器B的文件所在地址
string localfile = "C:\" + str + "\" + name;//这个是我客户本地电脑的C盘目录
下面是下载的代码
if (File.Exists(localfile))
{ writeStream = File.OpenWrite(localfile); // 存在则打开要下载的文件 startPosition = writeStream.Length; // 获取已经下载的长度 writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位 } else { writeStream = new FileStream(localfile, FileMode.Create);// 文件不保存创建一个文件 startPosition = 0; } try { HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接 if (startPosition > 0) { myRequest.AddRange((int)startPosition);// 设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置 } Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流 byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容 int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次 while (contentSize > 0)// 如果读取长度大于零则继续读 { writeStream.Write(btArray, 0, contentSize);// 写入本地文件 contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取 } //关闭流 writeStream.Close(); readStream.Close(); flag = true; //返回true下载成功 } catch (Exception E) { writeStream.Close(); return E.ToString(); } C# 姚刘乐 | 初学一级 | 园豆: 70
提问于:2019-03-26 10:38 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(3) 0 你上面代码做的,就是把服务器B的文件,下载服务器A;
你在这段代码后面,再执行一次这个下载方法,改下链接,就是从服务器A下载到客户端了 三人乐乐 | 园豆:3245 (老鸟四级) | 2019-03-26 14:15 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 B服务器写个webservice服务,A直接去调接口以文件流返回,然后return到本地 jqw2009 | 园豆:1946 (小虾三级) | 2019-03-26 15:07 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 你获取了B中文件,但是没有抛给浏览器呀。。
string fileName = "aaa.txt";//客户端保存的文件名,自己根据实际定义
string filePath = Server.MapPath("~/Document/123.txt");//这里填写你B服务器文件路径
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize]; Response.Clear(); System.IO.FileStream iStream = System.IO.File.OpenRead(filePath); long dataLengthToRead = iStream.Length;//获取下载的文件总大小 Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName)); while (dataLengthToRead > 0 && Response.IsClientConnected) { int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小 Response.OutputStream.Write(buffer, 0, lengthRead); Response.Flush(); dataLengthToRead = dataLengthToRead - lengthRead; } Response.Close(); } 一禅·小和尚 | 园豆:493 (菜鸟二级) | 2019-03-26 15:30 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。