下载网络资源文件到本地的方法(2种)
首先说明下Page.Response :
命名空间: System.Web.UI
程序集: System.Web(在 System.Web.dll 中)
获取与该 Page 对象关联的 HttpResponse 对象。该对象使您得以将 HTTP 响应数据发送到客户端,并包
含有关该响应的信息。
方法一(上/下载):
System.Net.WebClient:
提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。
WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数
据的公共方法。
I、 将数据上载到资源的 WebClient 方法:
OpenWrite :检索一个用于将数据发送到资源的 Stream。
UploadFile :将本地文件发送到资源,并返回包含任何响应的 Byte 数组。
II、从资源下载数据的 WebClient 方法:
OpenRead : 从资源以 Stream 的形式返回数据。
DownloadFile : 从资源将数据下载到本地文件。
WebClient client = new WebClient();
client.DownloadFile(address, fileName);
方法二(下载)
使用HttpWebRequest下载文件
- /// <summary>
- /// 下载文件
- /// </summary>
- /// <param name="URL">下载文件地址</param>
- ///
- /// <param name="Filename">下载后的存放地址</param>
- /// <param name="Prog">用于显示的进度条</param>
- ///
- public string DownloadFile(string URL, string filename)
- {
- try
- {
- System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)
-
- System.Net.HttpWebRequest.Create(URL);
- System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse
-
- ();
- long totalBytes = myrp.ContentLength;
- if (myrp.ContentLength != 0)
- {
- // MessageBox.Show("文件存在");
- System.IO.Stream st = myrp.GetResponseStream();
- System.IO.Stream so = new System.IO.FileStream(filename,
-
- System.IO.FileMode.Create);
- long totalDownloadedByte = 0;
- byte[] by = new byte[1024];
- int osize = st.Read(by, 0, (int)by.Length);
- while (osize > 0)
- {
- totalDownloadedByte = osize + totalDownloadedByte;
- so.Write(by, 0, osize);
- osize = st.Read(by, 0, (int)by.Length);
- }
- so.Close();
- st.Close();
- return "success";
- }else
- {
- MessageBox.Show("文件不存在");
- }
- }
- catch (System.Exception e)
- {
- return "下载文件失败!" + e.ToString();
- }
- }
从服务器端下载文件到本地的方法:
- //I、
- /// <summary>
- /// HttpResponse.AddHeader 方法--将一个 HTTP 头添加到输出流。
- /// public void AddHeader( string name, string value )
- /// name 要添加 value 的 HTTP 头名称。
- /// value 要添加到头中的字符串。
- /// Response.Clear() 方法: 清除缓冲区流中的所有内容输出
- /// HttpRequest.ContentType 属性: 获取或设置传入请求的 MIME 内容类型
- /// HttpResponse.BinaryWrite() 方法: 将一个二进制字符串写入 HTTP 输出流。
- /// HttpResponse.Flush() 方法: 向客户端发送当前所有缓冲的输出
- /// HttpResponse.WriteFile() 方法: 将指定的文件直接写入 HTTP 响应输出流。
- /// HttpResponse.End() 方法: 将当前所有缓冲的输出发送到客户端,停止该页的执行,
- /// 并引发 EndRequest 事件。
- /// </summary>
- /// <param name="fileName"></param> 客户端保存的文件名
- /// <param name="filePath"></param> 服务端文件路径
- private void down_load_file(string fileName, string filePath)
- {
- // string fileName = "ce2.rar";
- // string filePath = Server.MapPath("keji.rar");//路径
-
- //以字符流的形式下载文件
- FileStream fs = new FileStream(filePath, FileMode.Open);
- byte[] bytes = new byte[(int)fs.Length];
- fs.Read(bytes, 0, bytes.Length);
- fs.Close();
- Response.ContentType = "application/octet-stream";
- //通知浏览器下载文件而不是打开
- Response.AddHeader("Content-Disposition", "attachment; filename=" +
-
- HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
- Response.BinaryWrite(bytes);
- Response.Flush();
- Response.End();
- }
- //II、
- string filePath = @"E:/下载地址保存2/1.rar";
- System.IO.FileInfo file = new System.IO.FileInfo(filePath);
- if (file.Exists)
- {
- Response.Clear();
- Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
- Response.AddHeader("Content-Length", file.Length.ToString());
- Response.ContentType = "application/octet-stream";
- Response.Filter.Close();
- Response.WriteFile(file.FullName, false);
- Response.End();
- }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。