@namespace Oqtane.Modules.Controls @inherits ModuleBase @inject IFolderService FolderService @inject IFileService FileService @inject IJSRuntime jsRuntime @if (folders != null) {
@if (showfiles) {
} @if (haseditpermission) {
@if (uploadmultiple) { } else { } @if (showfiles && GetFileId() != -1) { }
@((MarkupString)@message) }
@if (@image != "") {
@((MarkupString)@image)
}
} @code { [Parameter] public string Folder { get; set; } // optional - for setting a specific folder by default [Parameter] public string FolderId { get; set; } // optional - for setting a specific folderid by default [Parameter] public string ShowFiles { get; set; } // optional - for indicating whether a list of files should be displayed - default is true [Parameter] public string FileId { get; set; } // optional - for setting a specific file by default [Parameter] public string Filter { get; set; } // optional - comma delimited list of file types that can be selected or uploaded ie. "jpg,gif" [Parameter] public string UploadMultiple { get; set; } // optional - enable multiple file uploads - default false string id; List folders; int folderid = -1; List files = new List(); int fileid = -1; bool showfiles = true; string fileinputid = ""; string progressinfoid = ""; string progressbarid = ""; string filter = "*"; bool uploadmultiple = false; bool haseditpermission = false; string message = ""; string image = ""; protected override async Task OnInitializedAsync() { if (!string.IsNullOrEmpty(Folder)) { folders = new List(); folders.Add(new Folder { FolderId = -1, Name = Folder }); folderid = -1; } else { folders = await FolderService.GetFoldersAsync(ModuleState.SiteId); if (!string.IsNullOrEmpty(FolderId)) { folderid = int.Parse(FolderId); } } if (!string.IsNullOrEmpty(FileId)) { fileid = int.Parse(FileId); await SetImage(); if (fileid != -1) { File file = await FileService.GetFileAsync(int.Parse(FileId)); if (file != null) { folderid = file.FolderId; } } } if (!string.IsNullOrEmpty(ShowFiles)) { showfiles = bool.Parse(ShowFiles); } if (!string.IsNullOrEmpty(Filter)) { filter = "." + Filter.Replace(",",",."); } await GetFiles(); // create unique id for component id = Guid.NewGuid().ToString("N"); fileinputid = id + "FileInput"; progressinfoid = id + "ProgressInfo"; progressbarid = id + "ProgressBar"; if (!string.IsNullOrEmpty(UploadMultiple)) { uploadmultiple = bool.Parse(UploadMultiple); } } private async Task GetFiles() { haseditpermission = false; if (!string.IsNullOrEmpty(Folder)) { haseditpermission = UserSecurity.IsAuthorized(PageState.User, Constants.HostRole); files = await FileService.GetFilesAsync(Folder); } else { Folder folder = folders.Where(item => item.FolderId == folderid).FirstOrDefault(); if (folder != null) { haseditpermission = UserSecurity.IsAuthorized(PageState.User,PermissionNames.Edit, folder.Permissions); files = await FileService.GetFilesAsync(folderid); } else { haseditpermission = false; files = new List(); } } if (filter != "*") { List filtered = new List(); foreach (File file in files) { if (filter.ToUpper().IndexOf("." + file.Extension.ToUpper()) != -1) { filtered.Add(file); } } files = filtered; } } private async Task FolderChanged(ChangeEventArgs e) { message = ""; try { folderid = int.Parse((string)e.Value); await GetFiles(); fileid = -1; image = ""; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); message = "
Error Loading Files
"; } } private async Task FileChanged(ChangeEventArgs e) { message = ""; fileid = int.Parse((string)e.Value); await SetImage(); StateHasChanged(); } private async Task SetImage() { image = ""; if (fileid != -1) { File file = await FileService.GetFileAsync(fileid); if (file.ImageHeight != 0 && file.ImageWidth != 0) { int maxwidth = 200; int maxheight = 200; double ratioX = (double)maxwidth / (double)file.ImageWidth; double ratioY = (double)maxheight / (double)file.ImageHeight; double ratio = ratioX < ratioY ? ratioX : ratioY; image = "\"""; } } } private async Task UploadFile() { var interop = new Interop(jsRuntime); string[] upload = await interop.GetFiles(fileinputid); if (upload.Length > 0) { try { string result; if (!string.IsNullOrEmpty(Folder)) { result = await FileService.UploadFilesAsync(Folder, upload, id); } else { result = await FileService.UploadFilesAsync(folderid, upload, id); } if (result == "") { await logger.LogInformation("File Upload Succeeded {Files}", upload); message = "
File Upload Succeeded
"; await GetFiles(); if (upload.Length == 1) { File file = files.Where(item => item.Name == upload[0]).FirstOrDefault(); if (file != null) { fileid = file.FileId; await SetImage(); } } StateHasChanged(); } else { await logger.LogError("File Upload Failed For {Files}", result.Replace(",", ", ")); message = "
File Upload Failed
"; } } catch (Exception ex) { await logger.LogError(ex, "File Upload Failed {Error}", ex.Message); message = "
File Upload Failed
"; } } else { message = "
You Have Not Selected A File To Upload
"; } } private async Task DeleteFile() { message = ""; try { await FileService.DeleteFileAsync(fileid); await logger.LogInformation("File Deleted {File}", fileid); message = "
File Deleted
"; await GetFiles(); fileid = -1; await SetImage(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting File {File} {Error}", fileid, ex.Message); message = "
Error Deleting File
"; } } public int GetFileId() { return fileid; } }