我有一个表单,用户可以在我的viewmodel中使用以下属性更改其个人资料图片:
public HttpPostedFileBase Image { get; set; }
这适用于上传,但我怎样才能显示他的照片?
我是否必须创建这样的另一个属性?
public HttpPostedFileBase UploadedImage { get; set; }
public byte[] Image { get; set; }
看起来不对,有没有办法用1个属性做到这一点?
谢谢
答案 0 :(得分:3)
解决方案取决于您保存图像的方式。如果您将其序列化为byte [],则可以执行以下操作以在View:
中加载图像在您的控制器中创建一个功能:
public void GetImageThumbnailFromByteArray(Guid? profileId)
{
Profile profile = // Get profile by profileId
Byte[] image = profile.Image;
new WebImage(image).Write();
}
在视图中:
<img src="@Url.Action("GetImageThumbnailFromByteArray", "Profile", new { profileId = Model.ProfileId})" />
答案 1 :(得分:3)
用户类
public class ApplicationUser : IdentityUser
{
public string Email { get; set; }
public byte[] Picture { get; set; }
}
查看图片:
[HttpGet]
[AllowAnonymous]
public ActionResult ViewImage(string id)
{
ApplicationUser user = m_DAL.Find<ApplicationUser>(x => x.UserName == User.Identity.Name);
byte[] buffer = user.Picture;
return File(buffer, "image/jpg", string.Format("{0}.jpg", user.UserName));
}
剃刀:
<img src="/user/viewimage/aaa">
或者如果你想在ViewModel中使用它:
@Html.Raw("<img src=\"data:image/jpeg;base64," + Convert.ToBase64String(Model.Picture) + "\" class=\"img-thumbnail\" style=\"width: 100px; height: 100px; margin-bottom: 20px;\" />")
答案 2 :(得分:1)
您通常会将图像保存到服务器(或数据库)上的目录中,然后只提供一个可用于呈现图像的URL,而不是将字节数组发送到HTML。
答案 3 :(得分:1)
你不想在viewmodel中使用HttpPostedFileBase来显示文件,这是HTTP请求的一部分。你的问题已在这里得到很好的回答:
Uploading/Displaying Images in MVC 4
或在这里