处理方式:

第一种:  我们需要获取文件,但是我们不需要保存源文件的名称

        public void DownFile(string uRLAddress, string localPath, string filename)
{
WebClient client = new WebClient();
Stream str = client.OpenRead(uRLAddress);
StreamReader reader = new StreamReader(str);
byte[] mbyte = new byte[1000000];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0; while (allmybyte > 0)
{ int m = str.Read(mbyte, startmbyte, allmybyte);
if (m == 0)
{
break;
}
startmbyte += m;
allmybyte -= m;
} reader.Dispose();
str.Dispose(); //string paths = localPath + System.IO.Path.GetFileName(uRLAddress);
string path = localPath + filename;
FileStream fstr = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
fstr.Write(mbyte, 0, startmbyte);
fstr.Flush();
fstr.Close();
}

  

第二种:我们需要获取文件,但是希望可以获取到文件的原名称以及其他的信息

    /// <summary>
/// 文件下载
/// </summary>
/// <param name="url">所下载的路径</param>
/// <param name="path">本地保存的路径</param>
/// <param name="overwrite">当本地路径存在同名文件时是否覆盖</param>
/// <param name="callback">实时状态回掉函数</param>
/// Action<文件名,文件的二进制, 文件大小, 当前已上传大小>
public static void HttpDownloadFile(string url, string path, bool overwrite, Action<string,string, byte[], 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
string contentType = response.Headers["Content-Type"];//attachment; 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;
///文件byte形式
byte[] b = ImageHelper.ImageToByte1(url);
//创建本地文件写入流
if (System.IO.File.Exists(Path.Combine(path, fileName))) {
fileName = DateTime.Now.Ticks + fileName;
}
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,contentType, b, totalLength, stream.Length);
}
}
}
}

但是这并不是绝对的,第一种方法当地址是    :

http://128.1.3.67:8083/api/wap/v2/fs/image/d4cbc75704ece271a5e0f1765346587f.jpg 时我们一样可以获取到名称 
 
 使用:System.IO.Path.GetFileName(uRLAddress)

WebClient HttpWebRequest 下载文件到本地的更多相关文章

  1. C#使用WebClient下载文件到本地目录

    C#使用WebClient下载文件到本地目录. 1.配置本地目录路径 <appSettings> <!--文件下载目录--> <add key="Downloa ...

  2. 使用WebClient下载文件到本地目录

    利用WebClient实现下载文件 调用 string url = "https://timgsa.baidu.com/timg?image&quality=80&size= ...

  3. c#线程中下载文件到本地

    额,太懒了 直接上示例代码... /// <summary> /// 下载文件到本地 2017-05-31 /// </summary> /// <param name= ...

  4. 根据文件url,下载文件到本地

    /// <summary> /// 根据文件url,下载文件到本地 /// </summary> /// <param name="fileUrl"& ...

  5. PHP实现远程下载文件到本地

    PHP实现远程下载文件到本地 投稿:hebedich 字体:[增加 减小] 类型:转载   经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经 ...

  6. PHP CURL实现远程下载文件到本地

    <?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...

  7. 在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹)

    在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹) 1 列出所有需要copy的sh文件 -bash-4.1$ ll /mysqllog/osw/*.sh ...

  8. 使用xshell从远程服务器下载文件到本地

    XSHELL工具上传文件到Linux以及下载文件到本地(Windows) Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz.首先你的L ...

  9. Js点击按钮下载文件到本地(兼容多浏览器)

    实现点击 用纯 js(非jquery)  下载文件到本地 自己尝试,加网上找了好久未果,如: window.open(url)   location.href=url   form表单提交   ifr ...

随机推荐

  1. C# WindowService 安装和卸载

    安装脚本 install.bat 内容 @echo 安装WindowService%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\installutil ...

  2. button与subit区别

    submit介绍   submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了.如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把su ...

  3. 【OpenCV】轮廓的特征矩Moment

    opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩. class Moments { public: ...... // 空间矩 double m00, m10, m01, m20, m ...

  4. go爬虫系列

    一.go语言爬取豆瓣电影top250 package main import ( "net/http" "io/ioutil" "os" & ...

  5. oracle——学习之路(SQL基础)

    使用create语句创建表 create table 表名 ( 列名 类型 [null     |     not null], 列名 类型 [null     |     not null] ) 在 ...

  6. 小菜鸟之servlet

    # Servlet课程-1和2和3 容 Web项目 项目代码部署在服务器上, 一般分为c\s(客户端\服务器端)和b\s(浏览器/服务器) 服务器 常用的服务器(tomcat服务器) tomcat的目 ...

  7. Android控制UI界面

    ⒈使用XML布局文件控制UI界面[推荐] Android推荐使用XML布局文件来控制视图,这样不仅简单.明了,而且可以将应用的视图控制逻辑从Java或Kotlin代码中分离出来,放入XML文件中控制, ...

  8. SpringBoot起飞系列-自定义starter(十)

    一.前言 到现在,我们可以看出来,如果我们想用一些功能,基本上都是通过添加spring-boot-starter的方式来使用的,因为各种各样的功能都被封装成了starter,然后把相关服务注入到容器中 ...

  9. Codeforces 1244F. Chips

    传送门 显然可以注意到连续的两个相同颜色的位置颜色是不会改变的,并且它还会把自己的颜色每秒往外扩展一个位置 同时对于 $BWBWBW...$ 这样的序列,它每个位置的颜色每一秒变化一次 然后可以发现, ...

  10. mysql+canal+kafka+elasticsearch构建数据查询平台

    1. 实验环境 CPU:4 内存:8G ip:192.168.0.187 开启iptables防火墙 关闭selinux java >=1.5 使用yum方式安装的java,提前配置好JAVA_ ...