protected override async Task ProcessCoreAsync(TagHelperContext context, TagHelperOutput output)
        {
            var model = new FileUploaderModel
            {
                Name                           = Name,
                Path                           = Path,
                UploadUrl                      = UploadUrl,
                UploadText                     = UploadText,
                DisplayRemoveButton            = DisplayRemoveButton,
                DisplayBrowseMediaButton       = DisplayBrowseMediaButton,
                DisplayRemoveButtonAfterUpload = DisplayRemoveButtonAfterUpload,
                HasTemplatePreview             = HasTemplatePreview,
                DownloadEnabled                = DownloadEnabled,
                MultiFile                      = MultiFile,
                TypeFilter                     = TypeFilter,
                PreviewContainerId             = PreviewContainerId,
                MainFileId                     = MainFileId,
                MaxFileSize                    = MaxFileSize,
                EntityType                     = EntityType,
                EntityId                       = EntityId,
                DeleteUrl                      = DeleteUrl,
                SortUrl                        = SortUrl,
                EntityAssignmentUrl            = EntityAssignmentUrl,
                UploadedFiles                  = UploadedFiles,
                OnUploading                    = OnUploading,
                OnUploadCompleted              = OnUploadCompleted,
                OnError                        = OnError,
                OnFileRemoved                  = OnFileRemoved,
                OnAborted                      = OnAborted,
                OnCompleted                    = OnCompleted,
                OnMediaSelected                = OnMediaSelected
            };

            var extensions = _mediaTypeResolver.ParseTypeFilter(TypeFilter.HasValue() ? TypeFilter : "*");

            model.AcceptedFileExtensions = "." + string.Join(",.", extensions);

            var widget  = new ComponentWidgetInvoker("FileUploader", new { model });
            var partial = await widget.InvokeAsync(ViewContext);

            output.TagMode = TagMode.StartTagAndEndTag;
            output.TagName = null;
            output.Content.SetHtmlContent(partial);
        }
示例#2
0
        public async Task <ActionResult> Upload(
            string path,
            string[] typeFilter = null,
            bool isTransient    = false,
            DuplicateFileHandling duplicateFileHandling = DuplicateFileHandling.ThrowError,
            string directory = "")
        {
            var numFiles = Request.Form.Files.Count;
            var result   = new List <object>(numFiles);

            for (var i = 0; i < numFiles; ++i)
            {
                if (directory.HasValue())
                {
                    path = _mediaService.CombinePaths(path, directory);

                    if (!_mediaService.FolderExists(path))
                    {
                        await _mediaService.CreateFolderAsync(path);
                    }
                }

                var uploadedFile = Request.Form.Files[i];
                var fileName     = uploadedFile.FileName;
                var filePath     = _mediaService.CombinePaths(path, fileName);

                try
                {
                    // Check if media type or file extension is allowed.
                    var extension = Path.GetExtension(fileName).TrimStart('.').ToLower();
                    if (typeFilter != null)
                    {
                        var mediaTypeExtensions = _mediaTypeResolver.ParseTypeFilter(typeFilter);
                        if (!mediaTypeExtensions.Contains(extension))
                        {
                            throw _exceptionFactory.DeniedMediaType(fileName, extension, typeFilter);
                        }
                    }
                    else
                    {
                        // Check if extension is allowed by media settings.
                        if (!_mediaTypeResolver.GetExtensionMediaTypeMap().Keys.Contains(extension))
                        {
                            throw _exceptionFactory.DeniedMediaType(fileName, extension);
                        }
                    }

                    using var stream = uploadedFile.OpenReadStream();
                    var mediaFile = await _mediaService.SaveFileAsync(filePath, stream, isTransient, duplicateFileHandling);

                    dynamic o = JObject.FromObject(mediaFile);
                    o.success     = true;
                    o.createdOn   = mediaFile.CreatedOn.ToString();
                    o.lastUpdated = mediaFile.LastModified.ToString();

                    result.Add(o);
                }
                catch (DuplicateMediaFileException dex)
                {
                    var dupe = dex.File;

                    dynamic o = JObject.FromObject(dupe);
                    o.dupe       = true;
                    o.errMessage = dex.Message;

                    var newPath = await _mediaService.CheckUniqueFileNameAsync(filePath);

                    o.uniquePath  = newPath;
                    o.createdOn   = dupe.CreatedOn.ToString();
                    o.lastUpdated = dupe.LastModified.ToString();

                    result.Add(o);
                }
                catch (Exception)
                {
                    throw;
                }
            }

            return(Json(result.Count == 1 ? result[0] : result));
        }