C# 实现下载文件并自动检测文件名(带进度反馈)
表示最近公司升级面板,要搞个远程下载功能,本来想偷懒直接百度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 | 已下载大小 |
本文出自 小古Blog,转载时请注明出处及相应链接。
本文永久链接: http://blog.chdz1.com/?post=252
3条评论
文件名乱码。几个小时了,没解决
我也只能找一个现成的哈。。
啊哈,我每次都只能找现成的用。