表示最近公司升级面板,要搞个远程下载功能,本来想偷懒直接百度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 | 已下载大小 |