问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用c#怎样从服务器下载文件,并保存为相应的类型12

发布网友 发布时间:2023-09-22 12:42

我来回答

2个回答

热心网友 时间:2024-11-24 01:32

C#从服务器下载文件可以使用下面4个方法:TransmitFile、WriteFile、WriteFile和流方式下载文件,并保存为相应类型,方法如下:

1、TransmitFile实现下载

protected void Button1_Click(object sender, EventArgs e)
    {
        /* 
        微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 
        下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 
        代码如下: 
        */ 
        Response.ContentType = "application/x-zip-compressed";
        Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
        string filename = Server.MapPath("DownLoad/z.zip");
        Response.TransmitFile(filename);
    }

2、WriteFile实现下载

protected void Button2_Click(object sender, EventArgs e)
    {
        /* 
        using System.IO;

        */
        string fileName = "asd.txt";//客户端保存的文件名 
        string filePath = Server.MapPath("DownLoad/aaa.txt");//路径

        FileInfo fileInfo = new FileInfo(filePath);
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        Response.AddHeader("Content-Transfer-Encoding", "binary");
        Response.ContentType = "application/octet-stream";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
        Response.End();
    }

3、WriteFile分块下载 

protected void Button3_Click(object sender, EventArgs e)
    {
        string fileName = "aaa.txt";//客户端保存的文件名 
        string filePath = Server.MapPath("DownLoad/aaa.txt");//路径

        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();
        }
    }

4、流方式下载

protected void Button4_Click(object sender, EventArgs e)
    {
        string fileName = "aaa.txt";//客户端保存的文件名 
        string filePath = Server.MapPath("DownLoad/aaa.txt");//路径

        //以字符流的形式下载文件 
        FileStream fs = new FileStream(filePath, FileMode.Open);
        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();
    }

热心网友 时间:2024-11-24 01:33

try
{
string savePath = ""//保存路劲
, downFileUrl = "";//下载文件链接地址
WebClient wcClient = new WebClient();
WebRequest webReq = WebRequest.Create(downFileUrl);
WebResponse webRes = webReq.GetResponse();
int fileLength = webRes.ContentLength;

Stream srm = webRes.GetResponseStream();
StreamReader srmReader = new StreamReader(srm);
byte[] bufferbyte = new byte[fileLength];
int allByte = (int)bufferbyte.Length;
int startByte = 0;
while (fileLength > 0)
{
//Application.DoEvents();
int downByte = srm.Read(bufferbyte, startByte, allByte);
if (downByte == 0) { break; };
startByte += downByte;
allByte -= downByte;
}

if (!File.Exists(savePath))
{
string[] dirArray = savePath.Split('\\');
string temp = string.Empty;
for (int i = 0; i < dirArray.Length - 1; i++)
{
temp += dirArray[i].Trim() + "\\";
if (!Directory.Exists(temp))
Directory.CreateDirectory(temp);
}
}
FileStream fs = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(bufferbyte, 0, bufferbyte.Length);
srm.Close();
srmReader.Close();
fs.Close();
}
catch (WebException ex)
{
throw ex;
}

用这段代码试试 我自己一直用这个代码下载的 貌似我当初测试的时候是用DOC测的

今天测试了下自己的代码 可以下DOC 我怀疑你的还是编码问题
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 呼叫中心客服专员工作内容主要负责什么6 阿尔伯特·诺伯斯的奇异生活 谁有这小说1 我想用WPS2012打印,我在一张横放的A4纸上设计了一张广告,想要缩放四个... 我妈妈41岁一年前前跟我爸爸离婚的昨天回家给我过18岁生日,...1 我妈妈41岁一年前跟我爸爸离婚的昨天回家给我过18岁生日晚上...1 我妈妈41岁8年前跟我爸爸离婚的,昨天我妈回家过18岁生日没...2 一个能在两个手机上同步吗? 碳酸硅是什么玩意? 什么是碳酸硅? 急求 秀逗魔导士 魔剑美神 TV版1,2,3,4季,剧场版,...1 秀逗魔导士国语版3 201年农历4月24号15点20分出生的男孩应该取什么名字 oppo最新款手机r9和r9plus有什么区别 身份证上的照片别人认不出我怎么办 银行都不敢相信照片上是我 不给... 我妈妈41岁几年前跟我爸爸离婚的昨天回家给我过18岁生日晚上... SSM-MyBatis-09:Mybatis中SqlSession的close为什么能造成事务的回滚_百 ... 用无碱速凝剂为什么混凝土不凝结1 一个可以两台手机同步登陆吗 一个能在两个手机上同步吗 ...3箱水果,每箱重50牛,现在要吧它们从一楼搬到三楼,她想出了两种_百度... 想去长治华夏斯坦福国际学校借读高中,那里怎么样?5 无碱速凝剂和有碱速凝剂沉淀物能放一起吗 喷射混凝土对液体速凝剂的沉淀要求?4 三大速凝剂的作用机理是怎么样的?1 我想知道1993年有两个三月,第一个三月十三阳历是几月几号?是什么星座... 想去长治华夏斯坦福国际学校一年的学费多少? ThinkPad S3-S431 20AX-000FCD的蓝... 电脑显卡的问题 独显和集成显卡有什么区别 一个能在两个手机上同步吗 一个能在两个手机上同步吗? ...执导的美国动画片《飞出个未来第七季》百度网盘资源。 库尔勒市阿瓦提乡有没有牛场啊 想去长治华夏斯坦福学校借读高一,据说很难进,各位帮忙一下吧7 想去长治华夏斯坦福国际学校一年的学费多少?咱们学校高中一年学...4 武夷山的风景,要用文字71 独立显卡和集成显卡有什么区别呢?怎么能认出是集成和独立呢? 大学考查课期末考吗 C#.net 怎样用前台代码调用后台代码的方法?4 C#后台怎么获取前台文件上传的路径? 在c#中(c&#47;s)如何实现将上传的文件保存到指定的文件夹1