写这个的缘由是在CSDN看到的两个问题:
1、抓取网络图片,不在本地保存而直接显示
2、在站点服务器上某个磁盘的文件里有图片,想能够在网站上显示出来,图片文件夹不在站点目录
一、读取网络图片
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <img src="Handler.ashx?url=http://www.google.com.hk/intl/zh-CN/images/logo_cn.png" mce_src="http://Handler.ashx?url=http://www.google.com.hk/intl/zh-CN/images/logo_cn.png"
- alt="google logo" />
- </div>
- </form>
- </body>
- </html>
Handler.ashx
- <%@ WebHandler Language="C#" Class="Handler" %>
- using System;
- using System.Web;
- using System.Net;
- using System.Drawing;
- using System.IO;
- public class Handler : IHttpHandler {
- public void ProcessRequest (HttpContext context) {
- string imgUrl = context.Request["Url"];
- if (!string.IsNullOrEmpty(imgUrl))
- {
- Uri myUri = new Uri(imgUrl);
- WebRequest webRequest = WebRequest.Create(myUri);
- WebResponse webResponse = webRequest.GetResponse();
- Bitmap myImage = new Bitmap(webResponse.GetResponseStream());
- MemoryStream ms = new MemoryStream();
- myImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
- context.Response.ClearContent();
- context.Response.ContentType = "image/Jpeg";
- context.Response.BinaryWrite(ms.ToArray());
- }
- }
- public bool IsReusable {
- get {
- return false;
- }
- }
- }
二、读取本地图片
读取本地文件,如:d:/1.jpg
- <%@ WebHandler Language="C#" Class="Handler2" %>
- using System;
- using System.Web;
- using System.IO;
- using System.Drawing;
- public class Handler2 : IHttpHandler {
- public void ProcessRequest(HttpContext context)
- {
- string path = context.Request.QueryString["path"];
- if (!string.IsNullOrEmpty(path))
- {
- FileStream fs = new FileStream(@path, FileMode.Open, FileAccess.Read);
- Bitmap myImage = new Bitmap(fs);
- MemoryStream ms = new MemoryStream();
- myImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
- context.Response.ClearContent();
- context.Response.ContentType = "image/Jpeg";
- context.Response.BinaryWrite(ms.ToArray());
- }
- }
- public bool IsReusable {
- get {
- return false;
- }
- }
- }