Skip to main content
Version: Next

Overview

The @abpjs/file-management package provides file and directory management services for ABP React applications. This is the React equivalent of Angular's @volo/abp.ng.file-management module.

npm version

ABP Commercial License Required

This package is free to use but requires the corresponding backend module from ABP Commercial. You can purchase an ABP Commercial license from abp.io.

Installation

npm install @abpjs/file-management
# or
yarn add @abpjs/file-management

Required peer dependencies:

npm install @abpjs/core @abpjs/theme-shared

Features

  • File Operations - Create, read, delete, rename, and move files
  • Directory Operations - Create, delete, rename, and move directories
  • Directory Content - List files and subdirectories with filtering and sorting
  • Upload Validation - Pre-upload checks for file existence and name validation
  • Tree View Support - Directory info optimized for tree structures
  • Typed Proxy Services - Strongly-typed REST API services

Main Exports

Services

ServiceDescription
FileDescriptorServiceFile CRUD operations, content retrieval, and upload validation
DirectoryDescriptorServiceDirectory CRUD operations and content listing

File Types

TypeDescription
FileDescriptorDtoFile metadata (name, MIME type, size, dates)
CreateFileInputInput for creating a file
MoveFileInputInput for moving a file
RenameFileInputInput for renaming a file
FileUploadPreInfoDtoPre-upload validation result
FileUploadPreInfoRequestPre-upload validation input
FileIconInfoFile icon information

Directory Types

TypeDescription
DirectoryDescriptorDtoDirectory metadata
DirectoryDescriptorInfoDtoDirectory info for tree views (includes hasChildren)
DirectoryContentDtoContent item (file or directory)
DirectoryContentRequestInputContent request with filter and sorting
CreateDirectoryInputInput for creating a directory
MoveDirectoryInputInput for moving a directory
RenameDirectoryInputInput for renaming a directory

Enums

EnumDescription
FileIconTypeIcon type (FontAwesome or Url)
eFileManagementComponentsComponent replacement keys
eFileManagementPolicyNamesPermission policy names
eFileManagementRouteNamesRoute name constants

Quick Example

import {
FileDescriptorService,
DirectoryDescriptorService,
} from '@abpjs/file-management';
import { useRestService } from '@abpjs/core';

function FileManager() {
const restService = useRestService();
const fileService = new FileDescriptorService(restService);
const directoryService = new DirectoryDescriptorService(restService);

// Create a directory
const createDirectory = async () => {
const dir = await directoryService.create({
name: 'Documents',
parentId: null, // root level
});
console.log('Created directory:', dir.id);
};

// List directory content
const listContent = async (directoryId?: string) => {
const content = await directoryService.getContent({
id: directoryId,
filter: '',
sorting: 'name asc',
});
return content.items;
};

// Upload a file
const uploadFile = async (file: File, directoryId?: string) => {
const bytes = await file.arrayBuffer();
const content = Array.from(new Uint8Array(bytes));

const created = await fileService.create({
directoryId,
name: file.name,
mimeType: file.type,
content,
});
return created;
};

// Check before upload
const checkUpload = async (files: File[], directoryId?: string) => {
const preInfo = await fileService.getPreInfo(
files.map((f) => ({
directoryId,
fileName: f.name,
size: f.size,
}))
);
return preInfo.filter((p) => p.doesExist || !p.hasValidName);
};
}

FileDescriptorService

Service for managing files:

import { FileDescriptorService } from '@abpjs/file-management';

const fileService = new FileDescriptorService(restService);

// Get a file
const file = await fileService.get('file-id');

// List files in a directory
const files = await fileService.getList('directory-id');

// Get file content
const bytes = await fileService.getContent('file-id');

// Create a file
const newFile = await fileService.create({
directoryId: 'parent-dir-id',
name: 'document.pdf',
mimeType: 'application/pdf',
content: byteArray,
});

// Rename a file
const renamed = await fileService.rename('file-id', { name: 'new-name.pdf' });

// Move a file
const moved = await fileService.move({
id: 'file-id',
newDirectoryId: 'target-dir-id',
});

// Delete a file
await fileService.delete('file-id');

// Pre-upload validation
const preInfo = await fileService.getPreInfo([
{ directoryId: 'dir-id', fileName: 'test.pdf', size: 1024 },
]);

DirectoryDescriptorService

Service for managing directories:

import { DirectoryDescriptorService } from '@abpjs/file-management';

const dirService = new DirectoryDescriptorService(restService);

// Get a directory
const dir = await dirService.get('directory-id');

// List subdirectories (for tree view)
const children = await dirService.getList('parent-id');
// Returns: { items: DirectoryDescriptorInfoDto[] }

// Get directory content (files and subdirectories)
const content = await dirService.getContent({
id: 'directory-id',
filter: 'search term',
sorting: 'name asc',
});

// Create a directory
const newDir = await dirService.create({
name: 'New Folder',
parentId: 'parent-dir-id',
});

// Rename a directory
const renamed = await dirService.rename('dir-id', { name: 'New Name' });

// Move a directory
const moved = await dirService.move({
id: 'dir-id',
newParentId: 'target-parent-id',
});

// Delete a directory
await dirService.delete('directory-id');

Route Configuration

Initialize file management routes in your application:

import { initializeFileManagementRoutes } from '@abpjs/file-management';

// Call once during app initialization
initializeFileManagementRoutes();

// Or with custom configuration
import { configureRoutes, FILE_MANAGEMENT_ROUTE_PROVIDERS } from '@abpjs/file-management';
import { getRoutesService } from '@abpjs/core';

const routesService = getRoutesService();
const addRoutes = configureRoutes(routesService);
addRoutes();

Policy Names

Use policy constants for permission checks:

import { eFileManagementPolicyNames } from '@abpjs/file-management';
import { usePermission } from '@abpjs/core';

function FileActions() {
const canCreateFile = usePermission(eFileManagementPolicyNames.FileDescriptorCreate);
const canDeleteFile = usePermission(eFileManagementPolicyNames.FileDescriptorDelete);
const canCreateDir = usePermission(eFileManagementPolicyNames.DirectoryDescriptorCreate);
const canDeleteDir = usePermission(eFileManagementPolicyNames.DirectoryDescriptorDelete);

return (
<>
{canCreateFile && <button>Upload File</button>}
{canDeleteFile && <button>Delete File</button>}
{canCreateDir && <button>New Folder</button>}
</>
);
}

Available Policies:

PolicyDescription
DirectoryDescriptorBase directory permission
DirectoryDescriptorCreateCreate directories
DirectoryDescriptorUpdateUpdate directories
DirectoryDescriptorDeleteDelete directories
FileDescriptorBase file permission
FileDescriptorCreateCreate/upload files
FileDescriptorUpdateUpdate files
FileDescriptorDeleteDelete files

Component Keys

Use component keys for component replacement:

import { eFileManagementComponents } from '@abpjs/file-management';

// Available keys:
eFileManagementComponents.FolderContent // 'FileManagement.FolderContentComponent'

File Icon Types

import { FileIconType, fileIconTypeOptions } from '@abpjs/file-management';

// Enum values
FileIconType.FontAwesome // 0 - FontAwesome icon class
FileIconType.Url // 1 - URL to image

// For select components
<select>
{fileIconTypeOptions.map(opt => (
<option key={opt.value} value={opt.value}>{opt.label}</option>
))}
</select>

TypeScript Support

import type {
// File types
FileDescriptorDto,
CreateFileInput,
MoveFileInput,
RenameFileInput,
FileUploadPreInfoDto,
FileUploadPreInfoRequest,
FileIconInfo,
// Directory types
DirectoryDescriptorDto,
DirectoryDescriptorInfoDto,
DirectoryContentDto,
DirectoryContentRequestInput,
CreateDirectoryInput,
MoveDirectoryInput,
RenameDirectoryInput,
// Enums
FileIconType,
eFileManagementComponents,
eFileManagementPolicyNames,
eFileManagementRouteNames,
} from '@abpjs/file-management';

Dependencies

  • @abpjs/core - Core ABP React functionality
  • @abpjs/theme-shared - Shared UI components

See Also