我的应用程序允许用户通过选择图像上传单个图像:@Html.TextBoxFor(m => m.Image, new {type = "file"})
。如果有任何验证错误,我将丢失其选定的文件。因此,我通过If(!ModelState.IsValid)
代码块需要临时保存:传回HttpPostedFileBase从视图→控制器→返回查看
public ActionResult Create(MyModel model) {
if (!ModelState.IsValid)
{
if(model.Image != null && model.Image.ContentLength > 0) {
var displayName = Path.GetFileName(model.Image.FileName);
var fileExtension = Path.GetExtension(displayName);
var fileName = string.Format("{0}{1}", Guid.NewGuid(), fileExtension);
var path = Path.Combine(Server.MapPath("~/App_Data/Files"), fileName);
model.Image.SaveAs(path);
model.displayName = displayName;
model.FilePath = path;
return View(model);
}
}
我在视图中使用@Html.HiddenFor(m => m.FilePath)
。
model.Image
类型是HttpPostedFileBase
。我必须以某种方式重新获得用户选择图像HttpPostedFileBase
后!ModelState.IsValid
,以便能够将其保存在数据库中。任何机会传回@Html.TextBoxFor(m => m.Image, new {type = "file"})
内的信息?
How I later convert HttpPostedFileBase to byte[], in order to store image-data in database.
我不知道怎么跟我有工具做到这一点。
编辑:模型属性:
public string displayName { get; set; }
public string FilePath { get; set; }
public HttpPostedFileBase Image { get; set; }
不,你不能考绩一个属性
public byte[] Image { get; set; }
(M => m.Image,新{TYPE =“文件”})'出于安全原因。 (参考[MVC文件上传保存选定的文件](http://stackoverflow.com/questions/29261726/mvc-file-upload-save-selected-file))。你已经有一个隐藏的输入文件路径,所以如果'ModelSta te'现在在重新提交后有效,然后根据隐藏输入的值获取已保存的文件,并将其转换为字节数组,如果您想将其保存在数据库 –使用'byte [] bytes = System.IO.File.ReadAllBytes(model.FilePath);' –