Понятия не имею, зачем вообще это делать (хранить файл в сеансе), потому что, если у вас много пользователей, одновременно загружающих свои файлы, храните эти файлы в памяти вашего веб-сервера, особенно если эти файлыбольшой, этот сервер не будет работать долгоХранение файла в файловой системе - рекомендуемый подход.
Но в любом случае, вот как вы могли бы это сделать (при условии, что вы не читали или не заботились о моем предыдущем замечании):
[HttpPost]
public ActionResult Upload(MyViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var buffer = new byte[model.File.InputStream];
model.File.InputStream.Read(buffer, 0, buffer.Length);
Session["uploadedFile"] = buffer;
return View(model);
}
где свойство File в моделях представления является HttpPostedFileBase
.Далее у вас может быть действие контроллера, которое будет обслуживать этот файл:
public ActionResult Image()
{
byte[] buffer = (byte[])Session["uploadedFile"];
return File(buffer, "image/png");
}
, и в представлении у вас будет тег <img>
, указывающий на это действие:
<img src="@Url.Action("image")" alt="" />
СейчасКонечно, плагин AjaxUpload позволяет загружать файл с помощью AJAX, поэтому вам не нужно перезагружать всю страницу.Таким образом, в этом случае ваше действие контроллера может просто вернуть объект JSON, чтобы указать, успешно ли завершен процесс загрузки, а затем в обратном вызове успеха установить свойство src
тега <img>
для действия контроллера, которое будет обслуживать файл.