rocker_003 Ответов: 4

Рендеринг изображения в качестве ответа с использованием абсолютного url-адреса


я пытаюсь получить изображение в качестве ответа с веб-сайта, используя абсолютный url-адрес изображения. я попробовал ниже код. ответ показывает, но не изображение видно. я думаю, что здесь произошла простая ошибка. пожалуйста, помогите мне здесь.

Что я уже пробовал:

// Creates an HttpWebRequest with the specified URL.
                HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create("https://www.planwallpaper.com/static/images/HD-Wallpapers-C76_yCO55lB.jpg");

                myWebRequest.Method = "GET";
                myWebRequest.ContentType = "image/jpeg";

                // Sends the HttpWebRequest and waits for the response.		
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myWebRequest.GetResponse();   //HttpWebRequest_GetResponse():  Returns a response from an Internet resource.

                //get Stream Data from the response
                Stream receiveStream = myHttpWebResponse.GetResponseStream();

                //read the response from stream.
                StreamReader streamReader = new StreamReader(receiveStream);

                byte[] data = System.Text.Encoding.Default.GetBytes(streamReader.ReadToEnd());
                Response.ContentType ="image/jpeg";
                Response.BinaryWrite(data);
                Response.End();

4 Ответов

Рейтинг:
28

Richard Deeming

Цитата:
//get Stream Data from the response
Stream receiveStream = myHttpWebResponse.GetResponseStream();

//read the response from stream.
StreamReader streamReader = new StreamReader(receiveStream);

byte[] data = System.Text.Encoding.Default.GetBytes(streamReader.ReadToEnd());

Вы читаете двоичные данные с удаленного сервера. Вы отправляете двоичные данные обратно клиенту. Так почему же вы преобразуете эти двоичные данные в строку (использование UTF8), а затем преобразовать его обратно в двоичный код (используя кодировку вашего сервера по умолчанию)?

Удалите этот шаг, и это, вероятно, решит вашу проблему:
Stream receiveStream = myHttpWebResponse.GetResponseStream();

Response.ContentType ="image/jpeg";
receiveStream.CopyTo(Response.OutputStream);
Response.End();


rocker_003

у-у-у...потрясающе, братан... это работает... поблагодарить у очень многое.

Рейтинг:
2

Altaf Ansari

Если вы хотите скачать изображение с url-адреса, то лучший способ используется

System.Net.WebClient


попробовать это:

Using System.Net.WebClient;

string imageUrl = "https://www.planwallpaper.com/static/images/HD-Wallpapers-C76_yCO55lB.jpg";
string SavePath = @"D:\Pictures\HD-Wallpapers-C76_yCO55lB.jpg";
System.Net.WebClient client = new WebClient();
client.DownloadFile(new Uri(imageUrl), SavePath);


rocker_003

спасибо, но мне нужно показать только в качестве ответа, а не загружать его. возможно ли это? если возможно, то что это значит?

rocker_003

помогите мне пожалуйста...им упали здесь

Рейтинг:
2

Altaf Ansari

Хорошо тогда попробуй это:

public void save_file_from_url(string file_name, string url)
    {
        byte[] content;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        WebResponse response = request.GetResponse();
 
        Stream stream = response.GetResponseStream();
 
        using (BinaryReader br = new BinaryReader(stream))
        {
            content = br.ReadBytes(500000);
            br.Close();
        }
        response.Close();
 
        FileStream fs = new FileStream(file_name, FileMode.Create);
        BinaryWriter bw = new BinaryWriter(fs);
        try
        {
            bw.Write(content);
        }
        finally
        {
            fs.Close();
            bw.Close();
        }
    }


rocker_003

спасибо, но мне нужно показать изображение в качестве ответа, используя абсолютный путь без загрузки.
пожалуйста, направьте меня без загрузки изображения, как показать ответ изображения?

CHill60

Рекомендуется использовать ссылку "улучшить решение" и обновить исходное решение, а не публиковать второе решение - это сбивает с толку.

Рейтинг:
1

Dotnet_Dotnet

imgCapture is the id of asp image tag
protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            if (Request.InputStream.Length > 0)
            {
                using (StreamReader reader = new StreamReader(Request.InputStream))
                {
                    string hexString = Server.UrlEncode(reader.ReadToEnd());
                    string imageName = "PI" + DateTime.Now.Year.ToString().Substring(1) + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + ".jpg";
                    Session["pimage"] = imageName;
                    string imagePath = string.Format("~/pimage/{0}", imageName);
                    File.WriteAllBytes(Server.MapPath(imagePath), ConvertHexToBytes(hexString));
                    imgCapture.ImageUrl = imagePath; 
                    Session["CapturedImage"] = ResolveUrl(imagePath);
                }
            }
        }
    }

    private static byte[] ConvertHexToBytes(string hex)
    {
        byte[] bytes = new byte[hex.Length / 2];
        for (int i = 0; i < hex.Length; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
        }
        return bytes;
    }


rocker_003

спасибо, но мне нужно показать изображение в качестве ответа, используя абсолютный путь без загрузки.
пожалуйста, направьте меня без загрузки изображения, как показать ответ изображения?

Dotnet_Dotnet

привет Я так и сказал .Сначала сохраните изображение на сервере.
Затем отобразите в элементе управления изображением.Я уже говорил об этом выше.
Я беру изображение с идентификатором imgCapture <asp:image id="imgCapture" runat="server">