1. 程式人生 > >HttpWebRequest 下載圖片至本地

HttpWebRequest 下載圖片至本地

HttpWebRequest傳送web請求,獲取流檔案,儲存至本地

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Mvc;

namespace Web.Controllers
{
    public class HomeController : Controller
    {
        string url = "http://www.***.com/Image.aspx?ucode=ucode";

        public Stream GetFileToStream(string filePath)
        {
            FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] bytes = new byte[fileStream.Length];
            fileStream.Read(bytes, 0, bytes.Length);
            fileStream.Close();
            Stream streamFile = new MemoryStream(bytes);
            return streamFile;
        }

        public void Method1()
        {
            string fileName = @"\upload\" + GenerateTimeStamp() + ".jpg";

            string webPath = Server.MapPath(fileName);
            string pathName = @"d:\" + GenerateTimeStamp() + ".jpg";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

            req.ServicePoint.Expect100Continue = false;
            req.Method = "GET";
            req.KeepAlive = true;

            req.ContentType = "image/png";
            HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();

            System.IO.Stream stream = null;

            try
            {
                //以字元流的方式讀取HTTP響應
                stream = rsp.GetResponseStream();
                System.Drawing.Image.FromStream(stream).Save(pathName);
            }
            finally
            {
                // 釋放資源
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }
        }

        protected void Method2()
        {
            string fileName = @"\upload\" + GenerateTimeStamp() + ".jpg";

            string webPath = Server.MapPath(fileName);
            string pathName = @"d:\" + GenerateTimeStamp() + ".jpg";
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            myRequest.Method = "GET";

            HttpWebResponse myResponse = null;
            try
            {
                myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                Stream stream = myResponse.GetResponseStream();

                #region 儲存下載圖片

                MemoryStream ms = null;
                Byte[] buffer = new Byte[myResponse.ContentLength];
                int offset = 0, actuallyRead = 0;
                do
                {
                    actuallyRead = stream.Read(buffer, offset, buffer.Length - offset);
                    offset += actuallyRead;
                }
                while (actuallyRead > 0);
                ms = new MemoryStream(buffer);

                byte[] buffurPic = ms.ToArray();
                System.IO.File.WriteAllBytes(pathName, buffurPic);

                #endregion
            }
            //異常請求
            catch (WebException ex)
            {

            }
        }

        protected void Method3()
        {
            string fileName = @"\upload\" + GenerateTimeStamp() + ".jpg";

            string webPath = Server.MapPath(fileName);
            string pathName = @"d:\" + GenerateTimeStamp() + ".jpg";
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            myRequest.Method = "GET";

            HttpWebResponse myResponse = null;
            try
            {
                myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                Stream stream = myResponse.GetResponseStream();

                #region 儲存下載圖片

                FileStream fileStream = new FileStream(pathName, FileMode.Create, FileAccess.Write);
                byte[] bytes = new byte[1024];
                int readSize = 0;
                while ((readSize = stream.Read(bytes, 0, 1024)) > 0)
                {
                    fileStream.Write(bytes, 0, readSize);
                    fileStream.Flush();
                }
                #endregion

                myResponse.Close();
                stream.Close();
                fileStream.Close();
            }
            //異常請求
            catch (WebException ex)
            {

            }
            finally
            {

            }
        }

        public string GenerateTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalMilliseconds).ToString();
        }
    }
}