Unplanned
Last Updated: 06 Dec 2023 15:42 by Rick
Created by: Rick
Comments: 0
Category: FileManager
Type: Feature Request
3
Please provide the ability to set a ProxyUrl for file downloads. This will avoid the need to serve downloaded files as data URLs through JSInterop and will support downloading of larger files.
Unplanned
Last Updated: 04 Oct 2024 09:34 by ADMIN
Created by: Fabien
Comments: 3
Category: FileManager
Type: Feature Request
3

Greetings.

I was using the FileManager recently and wanted to make sure the user could only select a single file. I was expecting a parameter to configure that but I didn't find any. I was able to bypass the issue by acting on the value reported by the component but I found it a bit inconvenient.

I think it might be interesting if we could:

  • choose if we select one or several elements (single vs multiple selection, like with grids)
  • choose what element we can select (files & folders, files only, folders only)

What do you think?

Completed
Last Updated: 19 Apr 2023 07:28 by ADMIN
Release 4.2.0 (04/26/2023)

Sorry to bother you, but we found a problem when using the FileManager control. When you are in a directory hierarchy Home > Dir1 > DirA > DirX > DirY and you want to navigate to the parent directory say DirX using the breadcrumb, clicking on DirX, FileManager sends you to the root directory. I hope you can help me.

If there are a lot of child folders, the Breadcrumb navigation does not work correctly. The current directory does not respond to the selected one.

Completed
Last Updated: 13 Jun 2022 08:39 by ADMIN
Release 3.4.0

If there are many subfolders below a folder the list becomes too long for the TreeView window and gets cut off at the bottom. Apparently, there are some height and overflow settings missing. After some digging around in the rendered HTML and copying some CSS selectors (using F12 on Edge) I got it working with this in my CSS file:

.k-filemanager-content-container > div > div.k-pane.k-filemanager-navigation.k-pane-static > div > div > ul {
    height: 100%;
    overflow: auto;
}
.k-filemanager-content-container > div > div.k-pane.k-filemanager-navigation.k-pane-static > div > div {
    height: 100%;
}

----------ADMIN EDIT----------

In the meantime, here is a possible workaround:

<style>
 .k-treeview-lines {
        height: 100%;
 overflow: auto;
    }

    .k-filemanager-treeview {
        height: 100%;
 }
</style>

Completed
Last Updated: 16 Jan 2023 10:05 by ADMIN
Release 4.0.0 (18 Jan 2023) (R1 2023)
Created by: Comercializadora Paxia
Comments: 0
Category: FileManager
Type: Bug Report
2

The FileManager is not showing icons for video files, e.g. mp4. The icon's CSS class is k-i-video, but it may need to be k-i-file-video.

The workaround is to apply the k-i-file-video icon to k-i-video:

CSS

.k-i-video::before {
  content: "\e93b";
}

Unplanned
Last Updated: 28 May 2024 07:45 by ADMIN

Currently, only the "Download" option has an icon and this is not consistent:

Unplanned
Last Updated: 22 Mar 2023 21:04 by Rahul
Created by: Rahul
Comments: 0
Category: FileManager
Type: Feature Request
2
By default, the items are automatically sorted by name. I want to programmatically change the default "Sort By" option, so the user does not need to change it from the dropdown.
Duplicated
Last Updated: 15 Mar 2024 07:33 by Fabien

Greetings.

I was using the FileManager component for a project and wanted to disable some operations since in my use case, it must not be possible to do them. But I was surprized to notice that this apparently cannot be done. So I suggest to add boolean parameters that will allow to disable the following features:

  • new folder
  • renaming
  • searching
  • details pan
  • download
  • upload
  • delete

Of course, the goal here would be to render the user interface accordingly. E.g., if deletion is disabled:

  • remove the Delete entry in the right click menu
  • and never call the OnDelete event.
Completed
Last Updated: 05 Jan 2024 16:23 by ADMIN

When using the FileManager and navigating through directories, the Breadcrumb does not show the path.

Reproduction: https://blazorrepl.telerik.com/GdOCYQki12iTAeWd34

 

Unplanned
Last Updated: 15 Jul 2024 07:40 by Hang

When the user renames a folder, the TreeView foes not refresh to display the new folder name.

The test page below is based on the FileManager Events example.

A possible workaround is to recreate the FileManager in the OnUpdate handler:

@using System.IO

@if (ShouldRenderFileManager)
{
    <TelerikFileManager @ref="@FileManagerRef"
                        Data="@Files"
                        @bind-Path="@DirectoryPath"
                        View="@CurrentView"
                        ViewChanged="@OnViewChanged"
                        Height="400px"
                        OnCreate="@OnCreateHandler"
                        OnUpdate="@OnUpdateHandler"
                        OnDelete="@OnDeleteHandler"
                        OnModelInit="@OnModelInitHandler"
                        OnDownload="@OnDownloadHandler"
                        SelectedItems="@SelectedItems"
                        SelectedItemsChanged="@((IEnumerable<FlatFileEntry> selectedFiles) => OnSelect(selectedFiles))">
    </TelerikFileManager>
}

@foreach (var item in Files)
{
    <div>@item.Name</div>
}

@code {
    private bool ShouldRenderFileManager { get; set; } = true;

    private TelerikFileManager<FlatFileEntry>? FileManagerRef { get; set; }
    private List<FlatFileEntry> Files { get; set; } = new();

    private string DirectoryPath { get; set; } = string.Empty;

    private IEnumerable<FlatFileEntry> SelectedItems { get; set; } = new List<FlatFileEntry>();

    private FileManagerViewType CurrentView { get; set; }

    private void OnViewChanged(FileManagerViewType newView)
    {
        CurrentView = newView;
    }

    private async Task OnCreateHandler(FileManagerCreateEventArgs args)
    {
        var newFolder = args.Item as FlatFileEntry;

        var parent = GetParent(newFolder, DirectoryPath);

        newFolder.Id = "20";
        newFolder.ParentId = parent.Id;
        newFolder.Name = "New folder";
        newFolder.IsDirectory = true;
        newFolder.HasDirectories = false;
        newFolder.DateCreated = DateTime.Now;
        newFolder.DateCreatedUtc = DateTime.Now;
        newFolder.DateModified = DateTime.Now;
        newFolder.DateModifiedUtc = DateTime.Now;
        newFolder.Path = Path.Combine(DirectoryPath, newFolder.Name);
        newFolder.Extension = null;

        var parentDirectory = GetDirectory(DirectoryPath) ?? GetParent(newFolder, DirectoryPath);

        if (parentDirectory != null)
        {
            // Simulate add to the file system.
            newFolder.ParentId = parentDirectory.Id;
            Files.Add(newFolder);
            parentDirectory.HasDirectories = Files.Count(x => x.ParentId == parentDirectory.Id) > 0;
        }
        else
        {
            // Create a folder in the root directory.
            Files.Add(newFolder);
        }

        RefreshData();
    }

    private FlatFileEntry GetDirectory(string path)
    {
        var directory = Files.FirstOrDefault(x => x.IsDirectory && x.Path == path);

        return directory;
    }

    private FlatFileEntry GetParent(FlatFileEntry currItem, string currDirectory)
    {
        var parentItem = Files
            .FirstOrDefault(x => x.IsDirectory && x.Path == currDirectory);

        return parentItem;
    }


    private async Task OnUpdateHandler(FileManagerUpdateEventArgs args)
    {
        var item = args.Item as FlatFileEntry;

        if (item.IsDirectory)
        {
            var name = item.Name ?? string.Empty;

            var updatedItem = Files.FirstOrDefault(x => x.Id == item.Id);
            updatedItem.Name = item.Name;
            updatedItem.Path = Path.Combine(DirectoryPath, name);

            ShouldRenderFileManager = false;
            await Task.Delay(1);
            ShouldRenderFileManager = true;
        }
        else
        {
            // The name property is updated, but also update the path to the file.
            var name = item.Name ?? string.Empty;
            var extension = item.Extension ?? string.Empty;
            var fullName = extension.Length > 0 && name.EndsWith(extension) ?
                name : $"{name}{extension}";

            var updatedItem = Files.FirstOrDefault(x => x.Id == item.Id);

            updatedItem.Name = item.Name;
            updatedItem.Path = Path.Combine(DirectoryPath, fullName);
            Console.WriteLine(updatedItem.Path);
        }
    }

    private async Task OnDownloadHandler(FileManagerDownloadEventArgs args)
    {
        var selectedItem = args.Item as FlatFileEntry;

        // The Filemanager does not have the actual file.
        // Obtain the file contents, based on args.Item, and set the event arguments:

        //args.Stream = the file stream of the actual selected file;
        //args.MimeType = the MIME type of the actual file;
        //args.FileName = the file name that the browser will receive (optional);

        FlatFileEntry actualFile = (FlatFileEntry)args.Item;

        string dummyFileContent = $"This file is a dummy version of {actualFile.Name}. It was downloaded with the Telerik Blazor FileManager.";
        byte[] dummyFileBuffer = System.Text.Encoding.UTF8.GetBytes(dummyFileContent);

        args.Stream = new MemoryStream(dummyFileBuffer);
        args.MimeType = "text/plain";
        args.FileName = $"filemanager-{actualFile.Name}-{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.txt";
    }

    private async Task OnDeleteHandler(FileManagerDeleteEventArgs args)
    {
        var currItem = args.Item as FlatFileEntry;

        var itemToDelete = Files.FirstOrDefault(x => x.Id == currItem.Id);

        Files.Remove(itemToDelete);

        RefreshData();
    }

    private FlatFileEntry OnModelInitHandler()
    {
        var item = new FlatFileEntry();
        item.Name = $"New folder";
        item.Size = 0;
        item.Path = Path.Combine(DirectoryPath, item.Name);
        item.IsDirectory = true;
        item.HasDirectories = false;
        item.DateCreated = DateTime.Now;
        item.DateCreatedUtc = DateTime.Now;
        item.DateModified = DateTime.Now;
        item.DateModifiedUtc = DateTime.Now;

        return item;
    }

    private void OnSelect(IEnumerable<FlatFileEntry> selectedFiles)
    {
        // Update the view model.
        SelectedItems = selectedFiles;
    }

    private void RefreshData()
    {
        Files = new List<FlatFileEntry>(Files);
    }

    protected override async Task OnInitializedAsync()
    {
        Files = await GetFlatFileEntries();
    }

    public class FlatFileEntry
    {
        public string Id { get; set; }
        public string ParentId { get; set; }
        public string Name { get; set; }
        public long Size { get; set; }
        public string Path { get; set; }
        public string Extension { get; set; }
        public bool IsDirectory { get; set; }
        public bool HasDirectories { get; set; }
        public DateTime DateCreated { get; set; }
        public DateTime DateCreatedUtc { get; set; }
        public DateTime DateModified { get; set; }
        public DateTime DateModifiedUtc { get; set; }
    }

    // the next lines are hardcoded data generation so you can explore the FileManager freely

    private async Task<List<FlatFileEntry>> GetFlatFileEntries()
    {
        var workFiles = new FlatFileEntry()
        {
            Id = "1",
            ParentId = null,
            Name = "Work Files",
            IsDirectory = true,
            HasDirectories = true,
            DateCreated = new DateTime(2022, 1, 2),
            DateCreatedUtc = new DateTime(2022, 1, 2),
            DateModified = new DateTime(2022, 2, 3),
            DateModifiedUtc = new DateTime(2022, 2, 3),
            Path = Path.Combine("files"),
            Size = 3 * 1024 * 1024
        };

        var Documents = new FlatFileEntry()
        {
            Id = "2",
            ParentId = workFiles.Id,
            Name = "Documents",
            IsDirectory = true,
            HasDirectories = false,
            DateCreated = new DateTime(2022, 1, 2),
            DateCreatedUtc = new DateTime(2022, 1, 2),
            DateModified = new DateTime(2022, 2, 3),
            DateModifiedUtc = new DateTime(2022, 2, 3),
            Path = Path.Combine(workFiles.Path, "documents"),
            Size = 1024 * 1024
        };

        var Images = new FlatFileEntry()
        {
            Id = "3",
            ParentId = workFiles.Id,
            Name = "Images",
            IsDirectory = true,
            HasDirectories = false,
            DateCreated = new DateTime(2022, 1, 2),
            DateCreatedUtc = new DateTime(2022, 1, 2),
            DateModified = new DateTime(2022, 2, 3),
            DateModifiedUtc = new DateTime(2022, 2, 3),
            Path = Path.Combine(workFiles.Path, "images"),
            Size = 2 * 1024 * 1024
        };

        var files = new List<FlatFileEntry>()
{
            workFiles,

            Documents,

            Images
        };

        return files;
    }
}

Unplanned
Last Updated: 09 Oct 2024 13:54 by Hang
Created by: Hang
Comments: 0
Category: FileManager
Type: Feature Request
2
Is there any option to enable the use of escape backslash "\\" in the path?
Duplicated
Last Updated: 01 Mar 2023 14:06 by ADMIN
The FileManager Breadcrumb navigation breaks on Unix systems - the component navigates to "Home" and doesn't display any files and folders.
Unplanned
Last Updated: 14 Oct 2022 10:53 by ADMIN
I would like to be able to add a DropDownList or other HTML in the Upload Dialog. 
Unplanned
Last Updated: 17 Jul 2024 07:01 by ADMIN
Can I change the content of the Delete popup?
Unplanned
Last Updated: 11 Jul 2024 14:46 by Hang
When you right-click an item to open the Context Menu and select the "Delete" option, the confirmation dialog appears hidden behind the menu.
Completed
Last Updated: 17 Aug 2022 15:26 by ADMIN
Release 3.6.0 (14 Sep 2022) (R3 2022)
If you navigate to a deep hierarchy of subfolders the breadcrumb items in the file manager throw stack overflow exception. 
1 2