小古Blog
C# 实现下载文件并自动检测文件名(带进度反馈)
2016-7-23 小古


表示最近公司升级面板,要搞个远程下载功能,本来想偷懒直接百度Copy份代码直接用,结果.........找了好几页找不到符合要求的.........



无奈,只能自己动手写了



其实要求很简单就是下载远程文件并自动检测文件名称,但不知为啥BD上找不到..........



好了,不吹水了,直接看代码




        private void HttpDownloadFile(string url, string path, bool overwrite, Action<string, long, long> callback = null)
{
// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//获取文件名
string fileName = response.Headers["Content-Disposition"];//attachment;filename=FileName.txt
if (string.IsNullOrEmpty(fileName))
fileName = response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1];
else
fileName = fileName.Remove(0, fileName.IndexOf("filename=") + 9);
//直到request.GetResponse()程序才开始向目标网页发送Post请求
using (Stream responseStream = response.GetResponseStream())
{
long totalLength = response.ContentLength;
//创建本地文件写入流
using (Stream stream = new FileStream(Path.Combine(path, fileName), overwrite ? FileMode.Create : FileMode.CreateNew))
{
byte[] bArr = new byte[1024];
int size;
while ((size = responseStream.Read(bArr, 0, bArr.Length)) > 0)
{
stream.Write(bArr, 0, size);
callback?.Invoke(fileName, totalLength, stream.Length);
}
}
}
}




我相信大部分大部分童鞋一眼就能看懂各个参数意思,不过为了避免部分童鞋看不懂我还是说下吧



照旧用表格

















































HttpDownloadFile

url

string

远程文件网址

path

string

本地保存路径

overwrite

bool

当本地路径存在同名文件时是否覆盖

callback

Action<string, long, long>

实时状态回掉函数

回掉函数参数说明


callback


参数1


string

文件名

参数2


long

文件总大小

参数3

long

已下载大小





评论:
墨雪飘影
2019-10-24 21:05 回复
文件名乱码。几个小时了,没解决
足球比分
2017-05-26 23:37 回复
我也只能找一个现成的哈。。
深圳装修公司
2016-10-19 01:21 回复
啊哈,我每次都只能找现成的用。
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容