示例#1
0
        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);
        }
示例#2
0
        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);
        }