Не удается загрузить изображение с помощью WebClient в ASP.NET - PullRequest
0 голосов
/ 06 декабря 2011

На одном из мобильных сайтов я создал веб-страницу, на которой я использую веб-клиент для загрузки изображения с основного сайта (основного сайта для мобильных устройств) и изменения его размера с помощью растрового изображения, а также для передачи изображения на мобильный сайт. Путь к изображению для основного сайта работает нормально, но когда я использую WebClient для загрузки изображения, чтобы изменить его размер, я получаю следующую ошибку:

CreateThumbnail :System.Net.WebException: Unable to connect to the
   remote server ---> System.Net.Sockets.SocketException: A connection
   attempt failed because the connected party did not properly respond
   after a period of time, or established connection failed because
   connected host has failed to respond 209.59.186.108:80 at
   System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,
   SocketAddress socketAddress) at
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,
   Socket s4, Socket s6, Socket& socket, IPAddress& address,
   ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout,
   Exception& exception)

Может кто-нибудь предложить какое-либо решение этой проблемы, я попытался пропинговать вышеуказанный IP (209.59.186.108), используя следующую команду:

ping m.keyboardmag.com

возвращает следующие результаты:

Pinging m.keyboardmag.com [209.59.186.108] with 32 byte
Reply from 209.59.186.108: bytes=32 time=233ms TTL=112
Reply from 209.59.186.108: bytes=32 time=237ms TTL=112
Reply from 209.59.186.108: bytes=32 time=230ms TTL=112
Reply from 209.59.186.108: bytes=32 time=231ms TTL=112

по-прежнему не удается подключиться и загрузить изображение с помощью WebClient ...

************* ОБНОВЛЕНИЕ КОДА SNIPPET ************ ****

if (Request.QueryString["file"] != null)
        {
            string file = Request.QueryString["file"].ToString();
            int lnHeight = Convert.ToInt32(Request.QueryString["height"]);
            int lnWidth = Convert.ToInt32(Request.QueryString["width"]);
            string imgUrl = Request.QueryString["file"].ToString();
            Bitmap bmpOut = null;
            try
            {
                Bitmap loBMP;
                WebClient wb = new WebClient();

                byte[] ret = wb.DownloadData(imgUrl);

                MemoryStream ms = new MemoryStream(ret);
                loBMP = new Bitmap((Stream)ms);
                System.Drawing.Imaging.ImageFormat loFormat = loBMP.RawFormat;
                decimal lnRatio;
                int lnNewWidth = 0;
                int lnNewHeight = 0;
                //-----If the image is smaller than a thumbnail just return it As it is----- 
                if ((loBMP.Width < lnWidth && loBMP.Height < lnHeight))
                {
                    lnNewWidth = loBMP.Width;
                    lnNewHeight = loBMP.Height;
                }
                if ((loBMP.Width > loBMP.Height))
                {
                    lnRatio = (decimal)lnHeight / loBMP.Height;
                    lnNewHeight = lnHeight;
                    decimal lnTemp = loBMP.Width * lnRatio;
                    lnNewWidth = (int)lnTemp;
                    if (lnNewWidth > 128)
                    {
                        lnNewWidth = 128;
                    }
                    /*
                    lnRatio = (decimal)lnWidth / loBMP.Width;
                    lnNewWidth = lnWidth;
                    decimal lnTemp = loBMP.Height * lnRatio;
                    lnNewHeight = (int)lnTemp;*/
                }
                else
                {
                    lnRatio = (decimal)lnHeight / loBMP.Height;
                    lnNewHeight = lnHeight;
                    decimal lnTemp = loBMP.Width * lnRatio;
                    lnNewWidth = (int)lnTemp;
                    if (lnNewWidth < 75)
                    {
                        lnNewWidth = 75;
                    }
                }
                bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
                Graphics g = Graphics.FromImage(bmpOut);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);
                if (Path.GetExtension(imgUrl) == "jpg")
                    Response.ContentType = "image/jpeg";
                else if (Path.GetExtension(imgUrl) == "bmp")
                    Response.ContentType = "image/bmp";
                else if (Path.GetExtension(imgUrl) == "png")
                    Response.ContentType = "image/png";
                else if (Path.GetExtension(imgUrl) == "gif")
                    Response.ContentType = "image/gif";

                bmpOut.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            catch (Exception ex)
            {
                HttpContext.Current.Response.Write("CreateThumbnail :" + ex.ToString());
            }
            finally
            {
            }

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

Можете ли вы опубликовать пример кода?

В прошлом я использовал приведенный ниже код и никогда не сталкивался с проблемой.

WebClient wb = new WebClient();
Image originalImage = Image.FromStream(wb.OpenRead(Url));
Image thumbNail = ImageResize.Crop(originalImage, Width, Height, ImageResize.AnchorPosition.Top);

Код для сохранения изображения:

EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, MyQuality);
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
originalImage.Save(FilePath, jpegCodec, encoderParams);

Интервал MyQuality от 0 до 100. 50-70 - хорошая отправная точка в зависимости от того, что вам нужно.

0 голосов
/ 06 декабря 2011

Ваш мобильный сайт слишком долго отвечает.Вы явно используете порт 80 (как видно из вашего фрагмента), поэтому, если вы можете открыть свой сайт с помощью браузера, в вашем коде нет ничего плохого.У вас есть проблема с задержкой в ​​сети.

На всякий случай делаем:

WebClient.DownloadFile("UrlToImage");

Должно работать нормально.

...