我有一个包含用户ID和图像列的视图。
这是我试图检索图像但我不断得到一个红色x而不是实际图像的框。
查看
<td><img src="<%= Url.Action( "DisplayImage" , "User" , new { id = item.id} ) %>" alt="" /></td>
控制器
public FileContentResult DisplayImage(string id)
{
byte[] image = repository.GetImage(id);
return File(image, "image/jpg");
}
我也试过返回一个ActionResult而且也没用。
存储库
public Byte[] GetImage(string id)
{
var image = db.GetImage(id).First<GetImageResult>();
if (image == null)
return null;
return image.UserImage;
}
LinqTOSQL类
[Function(Name="dbo.GetImage")]
public ISingleResult<GetImageResult> GetImage([Parameter(DbType="VarChar(8)")] string id)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), id);
return ((ISingleResult<GetImageResult>)(result.ReturnValue));
}
public partial class GetImageResult
{
private System.Byte[] _userImage;
public GetImageResult()
{
}
[Column(Storage="_userImage", DbType="Image")]
public System.Byte[] UserImage
{
get
{
return this._userImage;
}
set
{
if ((this. _userImage!= value))
{
this. _userImage = value;
}
}
}
}
我整天都在努力让自己开始工作,但它只是不起作用。 存储过程的返回类型是一个整数(至少当我查看参数时) SQL Server Management Studio它说整数),但我现在无法重新定义它吗?
它实际上是在UserController中使用正确的参数触及DisplayImage Action并返回File(imageByteArray,“image / jpg”),但只显示带有红色x的框。 任何帮助将不胜感激。
编辑:我已经尝试通过在操作结果中添加Reponse.BinaryWrite(imageByteArray)并直接通过goign到http://localhost/User/DisplayImage?id=10101010点击网址进行调试,并且该用户的图像显示在mspaint中。
edit2:我也做了一个视图源,我的html for the image标签如下所示。
<td>
<img src='/User.mvc/GetImage?id=U00915441' alt="" />
</td>
由于
答案 0 :(得分:3)
看看我前一段时间的这个问题 - 解决方案是special ActionResult type for images
编辑:这是我的代码。我实际上是用我用GDI +创建的Image创建一个ImageResult类,如下所示:
return new ImageResult()
{
ImageFormat = spriteInfo.ImageFormat,
EncodedImageBytes = spriteInfo.GetImageStream()
};
图像结果类是。你会注意到,如果我提供一个EncodedImageBytes参数,它会将它发送到输出流。这看起来就像你想要的。另一方面,如果您只是传入一个Image,那么它只会将Image写入输出流。
public class ImageResult : ActionResult
{
public ImageResult() { }
public int? Quality { get; set; }
public Image Image { get; set; }
public ImageFormat ImageFormat { get; set; }
public byte[] EncodedImageBytes { get; set; }
public override void ExecuteResult(ControllerContext context)
{
// verify properties
if (EncodedImageBytes == null)
{
if (Image == null)
{
throw new ArgumentNullException("Image");
}
}
if (ImageFormat == null)
{
throw new ArgumentNullException("ImageFormat");
}
// output
context.HttpContext.Response.Clear();
if (ImageFormat.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp";
if (ImageFormat.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif";
if (ImageFormat.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon";
if (ImageFormat.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg";
if (ImageFormat.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png";
if (ImageFormat.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff";
if (ImageFormat.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf";
// output stream
Stream outputStream = context.HttpContext.Response.OutputStream;
if (EncodedImageBytes != null)
{
outputStream.Write(EncodedImageBytes, 0, EncodedImageBytes.Length);
}
else
{
ImageUtil.SaveImageToStream(outputStream, Image, ImageFormat, Quality);
}
}
}