C# Http方式下载文件到本地类
直接上代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net; namespace ConsoleTest
{
class HttpDldFile
{
/// <summary>
/// Http方式下载文件
/// </summary>
/// <param name="url">http地址</param>
/// <param name="localfile">本地文件</param>
/// <returns></returns>
public bool Download(string url,string localfile)
{
bool flag = false;
long startPosition = ; // 上次下载的文件起始位置
FileStream writeStream; // 写入本地文件流对象 long remoteFileLength = GetHttpLength(url);// 取得远程文件长度
System.Console.WriteLine("remoteFileLength=" + remoteFileLength);
if (remoteFileLength==)
{
System.Console.WriteLine("远程文件不存在.");
return false;
} // 判断要下载的文件夹是否存在
if (File.Exists(localfile))
{ writeStream = File.OpenWrite(localfile); // 存在则打开要下载的文件
startPosition = writeStream.Length; // 获取已经下载的长度 if (startPosition >= remoteFileLength)
{
System.Console.WriteLine("本地文件长度" + startPosition + "已经大于等于远程文件长度" + remoteFileLength);
writeStream.Close(); return false;
}
else
{
writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位
}
}
else
{
writeStream = new FileStream(localfile, FileMode.Create);// 文件不保存创建一个文件
startPosition = ;
} try
{
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接 if (startPosition > )
{
myRequest.AddRange((int)startPosition);// 设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置
} Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流 byte[] btArray = new byte[];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
int contentSize = readStream.Read(btArray, , btArray.Length);// 向远程文件读第一次 long currPostion=startPosition; while (contentSize > )// 如果读取长度大于零则继续读
{
currPostion+=contentSize;
int percent = (int)(currPostion*/ remoteFileLength);
System.Console.WriteLine("percent=" + percent + "%"); writeStream.Write(btArray, , contentSize);// 写入本地文件
contentSize = readStream.Read(btArray, , btArray.Length);// 继续向远程文件读取
} //关闭流
writeStream.Close();
readStream.Close(); flag = true; //返回true下载成功
}
catch (Exception)
{
writeStream.Close();
flag = false; //返回false下载失败
} return flag;
} // 从文件头得到远程文件的长度
private static long GetHttpLength(string url)
{
long length=; try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); if (rsp.StatusCode == HttpStatusCode.OK)
{
length = rsp.ContentLength;// 从文件头得到远程文件的长度
} rsp.Close();
return length;
}
catch(Exception e){
return length;
} }
}
}
调用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
HttpDldFile df = new HttpDldFile();
df.Download("http://files.cnblogs.com/files/xiandedanteng/Convertor20170624.zip","C:\\test\\Convertor20170624.zip");
}
}
}
C# Http方式下载文件到本地类的更多相关文章
- C# Http方式下载文件到本地类改进版
在上文基础上增加了远程文件是否存在和本地文件是否存在的判断. 类代码: using System; using System.Collections.Generic; using System.Lin ...
- C# Http方式下载文件到本地
下文代码是从网络(http://www.cnblogs.com/hayden/archive/2012/04/26/2472815.html)得来,亲测好用.我中修改了下格式和注释,版权属于原作者“舒 ...
- PHP CURL实现远程下载文件到本地
<?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...
- 呵呵哒,LNMP下通过fread方式下载文件时,中文名称文件找不到文件
哎,整整折腾一个下午. 本来好好的,thinkphp 自动的uniq方式保存的文件名,非要使用原文件名,真心蛋疼~~ 然后就只好写个脚本 把原来的所有文件都重新命名一下 - - 然后把数据库对应字段也 ...
- C#使用WebClient下载文件到本地目录
C#使用WebClient下载文件到本地目录. 1.配置本地目录路径 <appSettings> <!--文件下载目录--> <add key="Downloa ...
- ajax方式下载文件
在web项目中需要下载文件,由于传递的参数比较多(通过参数在服务器端动态下载指定文件),所以希望使用post方式传递参数.通常,在web前端需要下载文件,都是通过指定<a>标签的href属 ...
- Http方式下载文件
代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System ...
- Java远程下载文件到本地(http协议和ssh2协议)
Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现.前段时间遇到了以下两种需求: 1.与某系统对接,每天获取最新的图片并显示在前端页面.该系 ...
- PHP实现远程下载文件到本地
PHP实现远程下载文件到本地 投稿:hebedich 字体:[增加 减小] 类型:转载 经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经 ...
随机推荐
- java.lang.NoSuchMethodError: net.sf.cglib.core.Signature
今天二次开发Dubbo-admin的管理平台,开启tomcat直接报错,错误关键字为“ java.lang.NoSuchMethodError: net.sf.cglib.core.Signature ...
- 你可能不熟悉的JS总结
暂时性死区 只要块级作用域存在let命令,它所声明的变量就"绑定"这个区域,不再受外部的影响.这么说可能有些抽象,举个例子: var temp = 123; if(true) { ...
- 20145216 史婧瑶《Java程序设计》第6周学习总结
20145216 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 如果要将数据从来源中取出,可以使用输 ...
- 配置ssh秘钥登陆
环境2台linux服务器:node1 192.168.X.234 node2 192.168.X.242 演示用node1无密码登陆node ...
- mySQL 多表查询语句
多表查询最少有2张以上的表一起查询 交叉连接查询(很少用)查询出来的数据是错误的 内连接 [inner] join on 隐式省略inner join on select from 表A,表B wh ...
- selenium webdriver模拟鼠标键盘
在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.s ...
- PigVar: THE PIG VARIATIONS AND POSITIVE SELECTION DATABASE
URL: http://www.ibiomedical.net/ http://103.53.216.7/ Go to aldb database. (keywords: chicken, cow, ...
- poj3977 - subset - the second time - 暴力 + 二分
2017-08-26 11:38:42 writer:pprp 已经是第二次写这个题了,但是还是出了很多毛病 先给出AC代码: 解题思路: 之前在培训的时候只是笼统的讲了讲怎么做,进行二分对其中一边进 ...
- bzoj 1270: [BeijingWc2008]雷涛的小猫 简单dp+滚动数组
1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Descrip ...
- tp5搭建1
1.首先在wamp环境根目录下创建文件夹resource. 2.利用composer下载tp5框架 怎么利用composer下载tp5框架 根据tp5完全开发手册,composer下载你的tp5框架 ...