如何用视图模型加载和上传图像
本文关键字:图像 加载 何用 视图 模型 | 更新日期: 2023-09-27 18:04:08
我有一个表单,用户可以在我的视图模型中使用以下属性更改他的个人资料图片:
public HttpPostedFileBase Image { get; set; }
这对上传很有用,但是我怎么才能显示他的照片呢?
我必须创建这样的另一个属性吗?
public HttpPostedFileBase UploadedImage { get; set; }
public byte[] Image { get; set; }
它看起来是错误的,有一种方法来做到这与1属性?
谢谢
用户类别
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;'" />")
解决方案取决于您如何保存图像。如果您将其序列化为byte[],您可以执行以下操作来在视图中加载图像:
在控制器中创建一个函数:
public void GetImageThumbnailFromByteArray(Guid? profileId)
{
Profile profile = // Get profile by profileId
Byte[] image = profile.Image;
new WebImage(image).Write();
}
View:
<img src="@Url.Action("GetImageThumbnailFromByteArray", "Profile", new { profileId = Model.ProfileId})" />
您通常会将图像保存到服务器上的一个目录(或者可能是数据库),然后简单地提供一个可用于呈现图像的URL,而不是将字节数组发送到HTML。
你不想在viewmodel中使用HttpPostedFileBase来显示文件,这是HTTP请求的一部分的包装。这里已经很好地回答了你的问题:
在MVC 4中上传/显示图像
这里或
在表单中上传图像并在MVC 4中显示