【问题标题】:Download and show an image from a URL in background在后台从 URL 下载并显示图像
【发布时间】:2013-04-29 19:32:46
【问题描述】:

如何使用 asp.net 从 URL 下载和显示图像

例如我有一个页面 ShowImage.aspx 当我调用此页面时,它应该显示来自外部 URL 的图像(来自响应流) https://appharbor.com/assets/images/stackoverflow-logo.png

使用 Response.ContentType = "Image/png"

自行解决

    protected void Page_Load(object sender, EventArgs e)
    {
        WebRequest req = WebRequest.Create("https://appharbor.com/assets/images/stackoverflow-logo.png");
        WebResponse response = req.GetResponse();
        Stream stream = response.GetResponseStream();

        Byte[] buffer = null;
        Response.Clear();
        Response.ContentType = "image/png";
        Response.AddHeader("Content-Length", response.ContentLength.ToString());

        int bytesRead = 0;
        do
        {
            buffer = new Byte[4096];
            bytesRead = stream.Read(buffer, 0, buffer.Length);

            if (bytesRead > 0)
            {
                Response.OutputStream.Write(buffer,0,bytesRead);
            }
        } while (bytesRead > 0);
        Response.End();
    }

参考号:http://forums.asp.net/t/1401931.aspx/1

【问题讨论】:

标签: c# asp.net


【解决方案1】:

您可以简单地使用 Image 控件的Image.ImageUrl 属性

<asp:Image id="img1" runat="server" ImageUrl="https://appharbor.com/assets/images/stackoverflow-logo.png" />

如果你想从服务器端设置图片网址(代码隐藏)

img1.ImageUrl = "http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.image.imageurl.aspx";

如果你使用 WebRequest 从 url 获取图像字符串。

WebRequest req = WebRequest.Create("https://appharbor.com/assets/images/stackoverflow-logo.png");
WebResponse response = req.GetResponse();
Stream stream = response.GetResponseStream();
System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
using (MemoryStream ms = new MemoryStream())
{
     image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
     ms.WriteTo(Response.OutputStream);
}

【讨论】:

  • 在页面上我不想添加任何asp.net控件,一切都应该发生在代码后面
  • 您在我不想添加的页面上添加了 asp:Image 控件
  • 显示图片需要asp:image或者img html控件,还需要什么?
  • 如何将stream写入Response?
【解决方案2】:
 public class Service1 : IService1
    {
        public Stream GetImage()
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
            using(WebClient Client = new WebClient())
            {
               using(StreamReader Reader = new StreamReader(Client.OpenRead("FILE URL")))
               {
                 try
                 {
                   string Contents = Reader.ReadToEnd();
                   Reader.Close();
                   return Contents;
                 }
                 catch
                 {
                    return string.Empty;
                 }
               }
            }
        }
    }

【讨论】:

  • 如何在asp.net页面中做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多