I wrote a fileupload function for my application. Basically the application is a web based folder structure, which has files included.
I don't know, but I am not happy with it. Is it too long? Can I do some parts easier? Is the logging ok? So many questions... The FileModel is inerhiting from ParentModel.
public ActionResult FileUpload()
{
int id = Convert.ToInt32(base.Request.Form["id"]);
bool isJson = Convert.ToBoolean(base.Request.Form["isJson"]);
try
{
if (id < 1)
{
id = Convert.ToInt32(base.Request.Form["folderId"]);
}
if (id < 1)
{
Logging.LogToFile("Could not load " + id ".", 3);
base.Response.StatusCode = 500;
return Json(new
{
success = false,
errFileUploadMsg = string.Concat(DateTime.Now, " Folder ID ", id, " couldn't load. Please try again.")
}, JsonRequestBehavior.AllowGet);
}
ParentModel pm = new ParentModel
{
Files = new Files()
};
Files fm = pm.Files;
int lastPosition = _mainFolderRepository.GetLastNumberOfFileInFolder(id);
int position = ((lastPosition.GetType() != typeof(DBNull)) ? (lastPosition + 1) : 0);
for (int i = 0; i < base.Request.Files.Count; i++)
{
HttpPostedFileBase file = base.Request.Files[i];
Stream str = base.Request.Files[i].InputStream;
BinaryReader br = new BinaryReader(str);
byte[] FileBytes = br.ReadBytes((int)str.Length);
fm.FullTextSearch = "";
fm.File = FileBytes;
fm.ContentLength = file.ContentLength;
fm.FileName = Path.GetFileName(file.FileName);
if (Regex.IsMatch(fm.FileName, "\\d+_\\d+"))
{
string[] fileNameSections = Path.GetFileNameWithoutExtension(fm.FileName).Split(' ')[0].Split('_');
if (fileNameSections[0].All(char.IsDigit) && fileNameSections[1].All(char.IsDigit))
{
fm.FileName = fm.FileName.Replace("_", "/");
}
}
if (_mainFolderRepository.IsFileNameInFolder(id, fm.FileName))
{
int fileIdForChange = _mainFolderRepository.GetFileId(id, fm.FileName);
_mainFolderRepository.UpdateFile(fileIdForChange, fm.File, fm.ContentLength);
}
else
{
if (!Helper.CheckIfExtensionStringAllowed(Path.GetExtension(file.FileName).ToLower()))
{
throw new FileFormatException(fm.Extension);
}
fm.Extension = Path.GetExtension(file.FileName).ToLower();
if ((fm.Extension == ".pdf" || fm.Extension == ".doc" || fm.Extension == ".docx") && fm.File.Length != 0)
{
fm.VolltextSuche = ConverterController.ConvertFileToText(fm.File, fm.FileName, fm.Extension);
}
_mainFolderRepository.FileUpload(fm.File, fm.ContentLength, fm.FileName, "", "", base.User.Identity.Name, DateTime.Now, isPublic: false, fm.Extension, id, fm.RessortId, position, fm.FullTextSearch, "");
}
position++;
}
}
catch (FileFormatException ex)
{
Logging.LogToFile(ex, 3);
if (!isJson)
{
base.TempData["Error"] = string.Concat(DateTime.Now, " - Extension ", ex.Message, " not allowed.");
return RedirectToAction("Index", "MainFolder");
}
base.Response.StatusCode = 500;
return Json(new
{
success = false,
errFileUploadMsg = string.Concat(DateTime.Now, " - Extension ", ex.Message, " not allowed.")
}, JsonRequestBehavior.AllowGet);
}
return RedirectToAction("Index", "MainFolder");
}