首页 新闻 搜索 专区 学院

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
< >
分享
所有回答(3)
0

你上面代码做的,就是把服务器B的文件,下载服务器A;
你在这段代码后面,再执行一次这个下载方法,改下链接,就是从服务器A下载到客户端了

三人乐乐 | 园豆:3250 (老鸟四级) | 2019-03-26 14:15
0

B服务器写个webservice服务,A直接去调接口以文件流返回,然后return到本地

jqw2009 | 园豆:1973 (小虾三级) | 2019-03-26 15:07
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
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册