[转]DownloadImage

本文介绍了一种使用C#进行图片下载的方法,并对比了两种不同的实现方式:通过HttpWebRequest及WebClient组件。前者可能在文件较大时遇到问题,而后者表现更为稳定。此外,文章还提供了一个使用线程进行批量下载的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.IO;
6
7
namespace DownloadImagebyXMLListFor2008 8{
9    public class HttpDownLoad
10    {
11        /**//// <summary>
12        /// HttpWebRequest Property
13        /// </summary>
14        /// <param name="fileName"></param>
15        /// <param name="url"></param>
16        /// <param name="localPath"></param>
17        /// <param name="timeout"></param>
18        public static void DownloadOneFileByURL(string fileName, string url, string localPath, int timeout)
19        {
20            System.Net.HttpWebRequest request = null;
21            System.Net.HttpWebResponse response = null;
22            request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url + fileName);
23            request.Timeout = timeout;//8000 Not work ?
24            response = (System.Net.HttpWebResponse)request.GetResponse();
25            Stream s = response.GetResponseStream();
26            BinaryReader br = new BinaryReader(s);
27            //int length2 = Int32.TryParse(response.ContentLength.ToString(), out 0);
28            int length2 = Int32.Parse(response.ContentLength.ToString());
29            byte[] byteArr = new byte[length2];
30            s.Read(byteArr, 0, length2);
31            if (File.Exists(localPath + fileName)) { File.Delete(localPath + fileName); }
32            if (Directory.Exists(localPath) == false) { Directory.CreateDirectory(localPath); }
33            FileStream fs = File.Create(localPath + fileName);
34            fs.Write(byteArr, 0, length2);
35            fs.Close();
36            br.Close();
37        }
38        /**//// <summary>
39        ///Web Client Method ,only For Small picture
40        /// </summary>
41        /// <param name="fileName"></param>
42        /// <param name="url"></param>
43        /// <param name="localPath"></param>
44        public static void DownloadOneFileByURLWithWebClient(string fileName, string url, string localPath)
45        {
46            System.Net.WebClient wc = new System.Net.WebClient();
47            if (File.Exists(localPath + fileName)) { File.Delete(localPath + fileName); }
48            if (Directory.Exists(localPath) == false) { Directory.CreateDirectory(localPath); }
49            wc.DownloadFile(url + fileName, localPath + fileName);
50        }
51    }
52}

需要注意点:
  第一 DownloadOneFileByURL方法,有时会下载不了文件,如果文件大于40K就更明显,DownloadOneFileByURLWithWebClient则无此问题。
  第二 调用时请用Thread,给出一个示例
1 private void btnGet_Click(object sender, EventArgs e) 2 { 3 if (txtTempFile.Text.Trim().Length == 0) 4 { 5 ErrorStop("列表文件为空!"); return; 6 } 7 System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DownloadAll)); 8 thread.Start(); 9 } 10 private void DownloadAll() 11 { 12 List<string> ls = GetStringsByFile(txtTempFile.Text.Trim()); 13 if (null != ls) 14 { 15 16 foreach (string s in ls) 17 { 18 try 19 { 20 //HttpDownLoad.DownloadOneFileByURL(s, Globals.HttpPreUrl, Globals.LocalPrePath, 8000000); 21 HttpDownLoad.DownloadOneFileByURLWithWebClient(s, Globals.HttpPreUrl, Globals.LocalPrePath); 22 } 23 catch { continue; } 24 } 25 } 26 }

http://tech.it168.com/msoft/2008-06-12/200806120749953_1.shtml

转载于:https://www.cnblogs.com/xinyuxin912/archive/2008/06/17/1223543.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值