2

我正在尝试从我的 Amazon S3 存储桶加载远程图像并将其以二进制形式发送到浏览器。我也在尝试同时学习 ASP.Net。我多年来一直是经典程序员,需要改变。我昨天开始,今天第一次头痛。

在我的应用程序的一个页面上,我有这个图像元素:

<img src="loadImage.ashx?p=rqrewrwr">

在 loadImage.ashx 上,我有这个确切的代码:

-------------------------------------------------
<%@ WebHandler Language="C#" Class="Handler" %>

string url = "https://............10000.JPG";
byte[] imageData;
using (WebClient client = new WebClient()) {
   imageData = client.DownloadData(url);
}

public void ProcessRequest(HttpContext context)
{
    context.Response.OutputStream.Write(imageData, 0, imageData.Length);
}
-------------------------------------------------

这可能有很多问题,因为这是我第一次尝试 .net 并且不知道我在做什么。首先,我收到以下错误,但肯定还会有更多错误。

CS0116: A namespace does not directly contain members such as fields or methods

这是在第 3 行,即string url = "https://............"

4

1 回答 1

5

对于 HttpHandler,您必须将代码放在后面的代码中……如果您在解决方案资源管理器中展开 loadimage.ashx,您应该会看到一个 loadimage.ashx.cs 文件。该文件是您的逻辑所在的位置,并且所有这些都应该在 ProcessRequest 方法中。

所以 loadimage.ashx 应该基本上是空的:

<%@ WebHandler Language="C#" Class="loadimage" %>

loadimage.ashx.cs 应该包含其余部分:

using System.Web;

public class loadimage : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string url = "https://............10000.JPG";
        byte[] imageData;
        using (WebClient client = new WebClient())
        {
            imageData = client.DownloadData(url);
        }

        context.Response.OutputStream.Write(imageData, 0, imageData.Length);
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

或者,您可以创建一个提供图像的 aspx 页面。这删除了需求背后的代码,但增加了一些开销......创建一个 loadimage.aspx 页面,其中包含以下内容:

<%@ Page Language="C#" AutoEventWireup="true" %>

<script language="c#" runat="server">
    public void Page_Load(object sender, EventArgs e)
    {
        string url = "https://............10000.JPG";
        byte[] imageData;
        using (System.Net.WebClient client = new System.Net.WebClient())
        {
            imageData = client.DownloadData(url);
        }

        Response.ContentType = "image/png";  // Change the content type if necessary
        Response.OutputStream.Write(imageData, 0, imageData.Length);
        Response.Flush();
        Response.End();
    }
</script>

然后在图像 src 中引用这个 loadimage.aspx 而不是 ashx。

于 2012-07-22T03:17:31.917 回答