读书人

web页面动态显示图片解决方法

发布时间: 2013-11-11 14:02:17 作者: rapoo

web页面动态显示图片
本帖最后由 stone1314 于 2013-11-09 16:18:22 编辑 这个是前台界面的

   <a  onclick="ExaminePictureFun('@name.Key')" href="javascript:void(0)"  >图片链接为:</a> 
<img id="imgPic" title="imgPicCake" alt="web页面动态显示图片解决方法" />



ExaminePictureFun = function (val) {
$("#imgPic").attr("src", "/Order/Picture?PictureID=" + val);
}


这个是collection

public ActionResult Picture(string PictureID)
{
return new ImageResult()
{
byteStream = (byte[])dic[PictureID]
};
}



public class ImageResult : ActionResult
{
public ImageResult() { }
public byte[] byteStream;

//重写ExecuteResult
public override void ExecuteResult(ControllerContext context)
{
// 设置响应设置

context.HttpContext.Response.ContentType = "image/jpeg";
context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.Public);
context.HttpContext.Response.BufferOutput = false;
FileStream filestream = null;
// 将图像流写入响应流中
const int buffersize = 1024 * 32;
byte[] buffer = new byte[buffersize];
int count = filestream.Read(buffer, 0, buffersize);
while (count > 0)
{
context.HttpContext.Response.OutputStream.Write(buffer, 0, count);
count = filestream.Read(buffer, 0, buffersize);
}
}

}


我的需求是这样的:
点击那个连接,用js,img标签显示图片 。
现在点击连接 什么反应也没有 是不是 src设置地址没有达到连接的效果 还是说 我的二进制图片本身就有问题。求解?
谢谢!
[解决办法]
引用:
今天搞了一天的MVC,在显示图片的时候老是出现问题,从网上搜索了好久,才找到解决方法。

首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下:

public class ImageResult : ActionResult
{
public ImageFormat ContentType { get; set; }
public Image image { get; set; }
public string SourceName { get; set; }

public ImageResult(string _SourceName, ImageFormat _ContentType)
{


this.SourceName = _SourceName;
this.ContentType = _ContentType;
}

public ImageResult(Image _ImageBytes, ImageFormat _ContentType)
{
this.ContentType = _ContentType;
this.image = _ImageBytes;
}

public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Clear();
context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
if (ContentType.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp";
if (ContentType.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif";
if (ContentType.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon";
if (ContentType.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg";
if (ContentType.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png";
if (ContentType.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff";
if (ContentType.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf";
if (image != null)
{
image.Save(context.HttpContext.Response.OutputStream, ContentType);
}
else
{
context.HttpContext.Response.TransmitFile(SourceName);
}
}
}

然后在 Controller类中创建一个Action.如下:

public ActionResult GetPicture(int id)
{
ICategory server = new CategoryServer();
byte[] buffer = server.getCategoryPicture(id);
if (buffer != null)
{
MemoryStream stream = new MemoryStream(buffer);
System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
ImageResult result = new ImageResult(image, System.Drawing.Imaging.ImageFormat.Jpeg);
return result;
}
return View();
}

这样就可以显示图片了。



下面几种方法可以显示已经存在的图片


方法一:



using System.IO;

public FileResult Image() {
string path = Server.MapPath("/Content/Images/Decorative/");
string filename = Request.Url.Segments[Request.Url.Segments.Length - 1].ToString();

// Uss Path.Combine from System.IO instead of StringBuilder.
string fullPath = Path.Combine(path, filename);

return(new FileResult(fullPath, "image/jpeg"));

}
方法二:
public ActionResult Image(string id)
{
var dir = Server.MapPath("/Images");


var path = Path.Combine(dir, id + ".jpg");
return base.File(path, "image/jpg");
}
方法三:
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(CacheProfile = "CustomerImages")]
public FileResult Show(int customerId, string imageName)
{
var path = string.Concat(ConfigData.ImagesDirectory, customerId, @"\", imageName);
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}
这三种都可以显示已经存在的图片
并且我认为第三种方法可以修改为从数据库中读取图片显示。

web页面动态显示图片解决方法

读书人网 >asp.net

热点推荐