2

我有一个使用 ASP 中的 WebClient 类的 GenericHandler 页面。

如果我想将图像加载到图像标签中,我不知道该怎么做。我试过了:

<img src="handler.asxh?url=http://somesite.com&contentType=image" />

但这并没有返回成功的图像,因为处理程序没有返回对象的路径,而是为它下载数据。

话虽如此:我有一堆数据,代表所述图像只是我无法将其放入标签中。

我使用身份验证进入网络服务器以获取存储在其中的图像,它完全符合我的要求,但图像本身被压缩并隐藏在不面向外部的数据库中,所以这样做似乎不起作用.

应该做什么?

编辑:处理程序实现

public void ProcessRequest(HttpContext context){
  WebClient wsb = new WebClient();
  string url = context.Request.QueryString["url"];
  string content = context.Request.QueryString["contentType"];
  string response = wsb.DownloadString(url);
  context.Response.ContentType = content;
  context.Response.Write(response);
}

编辑 2:这用于执行涉及不支持它的旧浏览器的 CORS。使用通用处理程序,在这种情况下,向客户端写入一个字节数组,您可以通过 URL 传入散列的身份验证令牌,然后解析并放入 WebClient 类标头中。

4

1 回答 1

2

您似乎正在将图像下载为字符串。但是,图像是二进制数据,不容易存储在字符串中(不包括 base64 或其他转换)。
您应该将图像下载为字节数组。

然后你可以使用response.BinaryWrite(byteArray)- 方法将数据发送到客户端。
下面的代码未经测试,但应该指向正确的方向:

public void ProcessRequest(HttpContext context){
  WebClient wsb = new WebClient();
  string url = context.Request.QueryString["url"];
  string content = context.Request.QueryString["contentType"];
  byte[] response = wsb.DownloadData(url);
  context.Response.ContentType = content;
  context.Response.BinaryWrite(response);
}
于 2013-10-04T12:16:59.103 回答