public ActionResult Upload(HttpPostedFileBase file)
{
var fileBrowserActions = IoC.Resolve<IFileBrowserCommands>();
var model = new FileBrowserViewModel
{
Ident = Request.Form["Ident"]
};
// test content length
if (file.ContentLength > FileBrowserViewModel.MaxFileSize)
{
ModelState.AddModelError<FileBrowserViewModel>(item => item.Ident,
string.Format(vlko.BlogModule.ModelResources.FileTooBigError, FileBrowserViewModel.MaxFileSize));
}
else
{
// test if ident specified
if (string.IsNullOrWhiteSpace(model.Ident))
{
ModelState.AddModelError<FileBrowserViewModel>(item => item.Ident, vlko.BlogModule.ModelResources.FileIdentRequireError);
}
else
{
// get new ident based on user ident and uploaded file extension
string fileIdent = model.Ident + Path.GetExtension(file.FileName);
// check if file exists
var existingItem = fileBrowserActions.GetFileInfo(User.Identity.Name, fileIdent);
if (existingItem != null)
{
ModelState.AddModelError<FileBrowserViewModel>(item => item.Ident, string.Format(vlko.BlogModule.ModelResources.FileIdentExistsError, fileIdent));
}
else
{
// Save file
if (!fileBrowserActions.SaveFile(User.Identity.Name, fileIdent, file.InputStream))
{
ModelState.AddModelError(string.Empty, vlko.BlogModule.ModelResources.FileUploadFailedError);
}
else
{
model.Ident = null;
}
}
}
}
// load user files
model.UserFiles = fileBrowserActions.GetAllUserFileInfos(User.Identity.Name);
// return normal view, for ajax we have iframe technique so normal result is needed
return View("Index", model);
}