public static ViewDataUploadFileResult StoreFile(Action <MvcFileSave> action) { var mvcFile = new MvcFileSave(); mvcFile.FileTimeStamp = DateTime.Now.ToUniversalTime(); action(mvcFile); ViewDataUploadFileResult status; var dirInfo = new DirectoryInfo(mvcFile.StorageDirectory); var file = mvcFile.File; var fileNameWithoutPath = Path.GetFileName(mvcFile.File.FileName); var fileExtension = Path.GetExtension(fileNameWithoutPath); var fileName = Path.GetFileNameWithoutExtension(Path.GetFileName(mvcFile.File.FileName)); var genName = fileName + "-" + mvcFile.FileTimeStamp.ToFileTime(); var genFileName = String.IsNullOrEmpty(mvcFile.FileName) ? genName + fileExtension : mvcFile.FileName;// get filename if set var fullPath = Path.Combine(mvcFile.StorageDirectory, genFileName); try { var viewDataUploadFileResult = new ViewDataUploadFileResult() { name = fileNameWithoutPath, SavedFileName = genFileName, size = file.ContentLength, type = file.ContentType, url = mvcFile.UrlPrefix + "/" + genFileName, //delete_url = Url.Action("DeleteFile", new { fileUrl = "/"+storageRoot+"/" + genFileName }), //thumbnail_url = thumbUrl + "?width=100", deleteType = "POST", Title = fileName, //for controller use FullPath = dirInfo.FullName + "/" + genFileName }; //add delete url mvcFile.AddFileUriParamToDeleteUrl("fileUrl", viewDataUploadFileResult.url); viewDataUploadFileResult.deleteUrl = mvcFile.DeleteUrl; status = viewDataUploadFileResult; mvcFile.File.SaveAs(fullPath); } catch (Exception exc) { if (mvcFile.ThrowExceptions) { throw; } status = new ViewDataUploadFileResult() { error = exc.Message, name = file.FileName, size = file.ContentLength, type = file.ContentType }; } return(status); }
public ActionResult UploadFile(int?entityId) // optionally receive values specified with Html helper { // here we can send in some extra info to be included with the delete url var statuses = new List <ViewDataUploadFileResult>(); for (var i = 0; i < Request.Files.Count; i++) { var x = new MvcFileSave(); x.File = Request.Files[i]; var filePath = Server.MapPath("~\\" + x.File.FileName); var fileStream = System.IO.File.Create(filePath); x.File.InputStream.Seek(0, SeekOrigin.Begin); x.File.InputStream.CopyTo(fileStream); fileStream.Close(); //BinaryReader b = new BinaryReader(x.File.InputStream); //byte[] binImage = b.ReadBytes(Convert.ToInt32(x.File.InputStream.Length)); //Stream stream = new MemoryStream(binImage); var uploadParams = new RawUploadParams { File = new FileDescription(filePath) }; var uploadResult = cloudinary.Upload(uploadParams); System.IO.File.Delete(filePath); x.UrlPrefix = uploadResult.SecureUri.AbsoluteUri; string currentUserId = User.Identity.GetUserId(); Context.Pictures.Add(new Picture { Url = x.UrlPrefix, UserId = currentUserId }); Context.SaveChanges(); x.FileName = Request.Files[i].FileName; // default is filename suffixed with filetimestamp x.ThrowExceptions = false; //default is false, if false exception message is set in error property statuses.Add(new ViewDataUploadFileResult { FullPath = x.UrlPrefix, size = x.File.ContentLength, deleteUrl = x.DeleteUrl, thumbnailUrl = x.UrlPrefix, url = x.UrlPrefix, name = x.FileName }); } //statuses contains all the uploaded files details (if error occurs then check error property is not null or empty) //todo: add additional code to generate thumbnail for videos, associate files with entities etc //adding thumbnail url for jquery file upload javascript plugin statuses.ForEach(x => x.thumbnailUrl = x.url);// + " width=300px height=200px"); // uses ImageResizer httpmodule to resize images from this url //setting custom download url instead of direct url to file which is default statuses.ForEach(x => x.url = Url.Action("DownloadFile", new { fileUrl = x.url, mimetype = x.type })); //server side error generation, generate some random error if entity id is 13 if (entityId == 13) { var rnd = new Random(); statuses.ForEach(x => { //setting the error property removes the deleteUrl, thumbnailUrl and url property values x.error = rnd.Next(0, 2) > 0 ? "We do not have any entity with unlucky Id : '13'" : String.Format("Your file size is {0} bytes which is un-acceptable", x.size); //delete file by using FullPath property if (System.IO.File.Exists(x.FullPath)) { System.IO.File.Delete(x.FullPath); } }); } var viewresult = Json(new { files = statuses }); //for IE8 which does not accept application/json if (Request.Headers["Accept"] != null && !Request.Headers["Accept"].Contains("application/json")) { viewresult.ContentType = "text/plain"; } return(viewresult); }