Exemplo n.º 1
0
        public ActionResult UploadFile(int?parentId)
        {
            UploadDbFileModel model;

            if (parentId.HasValue)
            {
                File parent = _fileService.GetFileById(parentId.Value);

                if (parent == null)
                {
                    return(NotFoundView());
                }

                if (!UserIsAllowedToCrud(parent))
                {
                    return(AccessDeniedView());
                }

                ViewBag.Parent = parent;

                model = new UploadDbFileModel {
                    ParentId = parent.Id
                };
            }
            else
            {
                model = new UploadDbFileModel();
            }

            ViewBag.AccessModes =
                new SelectList(new Dictionary <short, string>
            {
                { (short)AccessMode.Any, AccessMode.Any.ToLocalizedString() },
                { (short)AccessMode.None, AccessMode.None.ToLocalizedString() },
                {
                    (short)AccessMode.OnlyAuthenticated,
                    AccessMode.OnlyAuthenticated.ToLocalizedString()
                }
            }, "Key", "Value");

            return(View(model));
        }
Exemplo n.º 2
0
        public ActionResult UploadFile(UploadDbFileModel model)
        {
            ViewBag.AccessModes =
                new SelectList(new Dictionary <short, string>
            {
                { (short)AccessMode.Any, AccessMode.Any.ToLocalizedString() },
                { (short)AccessMode.None, AccessMode.None.ToLocalizedString() },
                {
                    (short)AccessMode.OnlyAuthenticated,
                    AccessMode.OnlyAuthenticated.ToLocalizedString()
                }
            }, "Key", "Value", model.AccessMode);

            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("", ValidationResources.InvalidState);

                return(View(model));
            }

            if (model.ParentId.HasValue)
            {
                File parent = _fileService.GetFileById(model.ParentId.Value);

                if (parent == null)
                {
                    return(NotFoundView());
                }

                if (!UserIsAllowedToCrud(parent))
                {
                    return(AccessDeniedView());
                }

                ViewBag.Parent = parent;
            }

            if (string.IsNullOrWhiteSpace(model.FileName))
            {
                model.FileName = model.PostedFile.FileName;
            }

            const string extensions =
                ".7z|.aiff|.asf|.avi|.bmp|.csv|.doc|.docx|.fla|.flv|.gif|.gz|.gzip|.jpeg|.jpg|.mid|.mov|.mp3|.mp4|.mpc|.mpeg|.mpg|.ods|.odt|.pdf|.png|.ppt|.pxd|.qt|.ram|.rar|.rm|.rmi|.rmvb|.rtf|.sdc|.sitd|.swf|.sxc|.sxw|.tar|.tgz|.tif|.tiff|.txt|.vsd|.wav|.wma|.wmv|.xls|.xml|.zip";

            if (Path.GetExtension(model.FileName) == "")
            {
                model.FileName += Path.GetExtension(model.PostedFile.FileName);
            }

            if (model.ContentLength == 0 ||
                extensions.Split('|').All(e => string.Compare(e, Path.GetExtension(model.FileName), StringComparison.OrdinalIgnoreCase) != 0))
            {
                ModelState.AddModelError("", ValidationResources.SelectedFileIsInvalid);

                return(View(model));
            }

            var file = new File
            {
                Uploader        = _webHelper.GetCurrentUser(HttpContext),
                AccessModeShort = model.AccessMode,
                CreateDate      = DateTime.UtcNow,
                Name            = model.FileName,
                ContentType     = model.ContentType,
                Size            = model.ContentLength,
                IsPublished     = true,
                ParentId        = model.ParentId
            };

            _fileService.SaveFile(file);

            bool isSaved;

            try
            {
                isSaved = _unitOfWork.SaveChanges() > 0;
            }
            catch
            {
                isSaved = false;
            }

            if (isSaved)
            {
                Logger.SaveLog(new CreateFileProvider(file));

                string targetPath = Server.MapPath(Constants.UploadsUrl);
                UploadUtilities.Save(model.PostedFile, targetPath, file.Guid.ToString());

                return(RedirectToAction("List", new { file.ParentId, page = 1 }));
            }

            ModelState.AddModelError("", ValidationResources.UploadFileFailure);

            return(View(model));
        }