我的應用程序允許用戶通過選擇圖像上傳單個圖像:@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);' –