示例#1
0
文件: Http.cs 项目: cmcd74/SavvyCMS
        // server side site suck / spidery thing to grab a remote image and save it locally
        public static string DownloadImageFromRemoteSiteAndSaveToDisk(string fullImageUrl)
        {
            var folderName = "Attachments\\RemoteImages\\" + Fmt.YearMonth(DateTime.Today) + "\\";
            var path       = folderName +
                             FileSystem.GetUniqueFilename(folderName,
                                                          fullImageUrl.Replace("/", "\\").Substring(fullImageUrl.LastIndexOf("/")));

            FileSystem.CreateFolder(Web.MapPath("~\\" + folderName));

            byte[]         imageBytes;
            HttpWebRequest imageRequest  = (HttpWebRequest)WebRequest.Create(fullImageUrl);
            WebResponse    imageResponse = imageRequest.GetResponse();

            Stream responseStream = imageResponse.GetResponseStream();

            using (BinaryReader br = new BinaryReader(responseStream)) {
                //imageBytes = br.ReadBytes(500000);					//jn replaced this
                const int bufferSize = 4096;
                using (var ms = new MemoryStream()) {
                    byte[] buffer = new byte[bufferSize];
                    int    count;
                    while ((count = br.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        ms.Write(buffer, 0, count);
                    }
                    imageBytes = ms.ToArray();
                }
                br.Close();
            }
            responseStream.Close();
            imageResponse.Close();

            FileStream   fs = new FileStream(Web.MapPath("~\\" + path), FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);

            try {
                bw.Write(imageBytes);
            } finally {
                fs.Close();
                bw.Close();
            }
            var result = Web.BaseUrl + path.Replace("\\", "/");

            return(result);
        }