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); }
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)); }