Мое приложение позволяет пользователю загружать одно изображение, выбирая изображения: @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
. I must как-то переиздание пользователей выбрано Изображение как 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.
Я не знаю, как сделать это с помощью инструментов у меня есть.
Edit: модель объекта:
public string displayName { get; set; }
public string FilePath { get; set; }
public HttpPostedFileBase Image { get; set; }
нет, вы не можете па его обратно в 'Html.TextBoxFor (м => m.Image, новый {тип =«файл»})' по соображениям безопасности. (см. [MVC File Upload сохранить выбранный файл] (http://stackoverflow.com/questions/29261726/mvc-file-upload-save-selected-file)). У вас уже есть скрытый ввод для пути к файлу, поэтому, если 'ModelSta te' теперь действителен после повторной отправки, затем получает файл, который вы сохранили, на основе значения скрытого ввода и преобразовывает его в массив байтов, если вы хотите сохранить его в базе данных –
, например. используя 'byte [] bytes = System.IO.File.ReadAllBytes (model.FilePath);' –