【aspnetcore】抓取遠程圖片


找到要抓取的圖片地址:http://i.imgur.com/8S7OaEB.jpg

抓取的步驟:

  1. 請求圖片路徑
  2. 獲取返回的數據
  3. 將數據轉換為stream
  4. 將stream轉換為Image
  5. 保存Image

明晰了步驟,接下來就簡單了,直接上代碼

public class RemoteImageCatchUtil
{
    private static string[] ImageExts = new[] { "jpg", "jpeg", "png", "bitmap", "gif" };

    public static string Catch(string remoteImagePath, string saveFolder, int timeout = 2000)
    {
        try
        {
            var request = WebRequest.Create(remoteImagePath) as HttpWebRequest;
            request.Timeout = timeout > 0 ? timeout : 1000;
            using (var response = request.GetResponse() as HttpWebResponse)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new Exception("遠程訪問失敗");
                }
                else
                {
                    var ext = GetImageExtension(response.ContentType).ToLower();
                    if (!ImageExts.Contains(ext))
                    {
                        throw new Exception("非圖片文件");
                    }

                    var stream = response.GetResponseStream();
                    var buffer = new byte[2048];
                    int count;
                    using (var ms = new MemoryStream())
                    {
                        while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)
                        {
                            ms.Write(buffer, 0, count);
                        }

                        if (!Directory.Exists(saveFolder))
                        {
                            Directory.CreateDirectory(saveFolder);
                        }
                        var imageName = Path.GetRandomFileName() + "." + ext;
                        var imagePath = Path.Combine(saveFolder, imageName);
                        var image = new Bitmap(ms);
                        image.Save(imagePath);
                        return imageName;
                    }
                }
            }
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }

    private static string GetImageExtension(string contentType)
    {
        if (contentType.StartsWith("image"))
        {
            return contentType.Split(@"/").Last();
        }
        return string.Empty;
    }
}

注意,這里的代碼僅供測試,使用時請自行完善。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM