You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于.NET Core API集成Syncfusion Angular Filemanager?

实现.NET Core后端适配Syncfusion Angular FileManager

1. 明确FileManager所需的API端点

Syncfusion FileManager前端会通过REST API与后端交互,你需要在.NET Core中实现以下核心路由:

  • GET /api/filemanager/files:获取指定路径下的文件/文件夹列表(支持路径、排序、过滤参数)
  • POST /api/filemanager/upload:上传文件到指定路径
  • POST /api/filemanager/create:在指定路径下创建文件夹
  • POST /api/filemanager/rename:重命名文件/文件夹
  • POST /api/filemanager/move:移动文件/文件夹到目标路径
  • POST /api/filemanager/copy:复制文件/文件夹到目标路径
  • POST /api/filemanager/delete:删除指定文件/文件夹
  • GET /api/filemanager/download:下载指定文件
  • GET /api/filemanager/get-image:预览图片(可选)

2. 定义匹配前端的数据模型

创建对应的数据类,确保返回格式与前端预期一致:

public class FileManagerItem
{
    public string Name { get; set; }
    public string Type { get; set; } // 取值为"file"或"directory"
    public long Size { get; set; }
    public DateTime DateModified { get; set; }
    public string Path { get; set; } // 相对根目录的路径,用"/"分隔
    public bool IsFile { get; set; }
    // 可选:ThumbnailUrl,用于图片预览
}

public class FileManagerResponse
{
    public List<FileManagerItem> Files { get; set; } = new();
    public string Error { get; set; }
    public bool Success { get; set; }
}

3. 封装文件系统操作逻辑

创建服务类处理底层文件操作:

public class FileManagerService
{
    private readonly string _rootDirectory;

    public FileManagerService(IWebHostEnvironment env)
    {
        // 根目录设置在wwwroot下的filemanager文件夹
        _rootDirectory = Path.Combine(env.WebRootPath, "filemanager");
        if (!Directory.Exists(_rootDirectory))
        {
            Directory.CreateDirectory(_rootDirectory);
        }
    }

    // 获取文件/文件夹列表
    public List<FileManagerItem> GetItems(string relativePath = "")
    {
        var targetPath = Path.Combine(_rootDirectory, relativePath);
        if (!Directory.Exists(targetPath))
            return new List<FileManagerItem>();

        var items = new List<FileManagerItem>();
        // 先遍历文件夹
        foreach (var dirPath in Directory.GetDirectories(targetPath))
        {
            var dirInfo = new DirectoryInfo(dirPath);
            items.Add(new FileManagerItem
            {
                Name = dirInfo.Name,
                Type = "directory",
                Size = 0,
                DateModified = dirInfo.LastWriteTime,
                Path = Path.Combine(relativePath, dirInfo.Name).Replace("\\", "/"),
                IsFile = false
            });
        }
        // 再遍历文件
        foreach (var filePath in Directory.GetFiles(targetPath))
        {
            var fileInfo = new FileInfo(filePath);
            items.Add(new FileManagerItem
            {
                Name = fileInfo.Name,
                Type = "file",
                Size = fileInfo.Length,
                DateModified = fileInfo.LastWriteTime,
                Path = Path.Combine(relativePath, fileInfo.Name).Replace("\\", "/"),
                IsFile = true
            });
        }
        return items;
    }

    // 上传文件
    public async Task<bool> Upload(IFormFile file, string relativePath = "")
    {
        var targetDir = Path.Combine(_rootDirectory, relativePath);
        if (!Directory.Exists(targetDir))
            Directory.CreateDirectory(targetDir);

        var savePath = Path.Combine(targetDir, file.FileName);
        using var stream = new FileStream(savePath, FileMode.Create);
        await file.CopyToAsync(stream);
        return true;
    }

    // 创建文件夹
    public bool CreateFolder(string folderName, string relativePath = "")
    {
        var targetPath = Path.Combine(_rootDirectory, relativePath, folderName);
        if (!Directory.Exists(targetPath))
        {
            Directory.CreateDirectory(targetPath);
            return true;
        }
        return false;
    }

    // 其他操作:重命名、移动、复制、删除等,可基于System.IO命名空间的API实现
}

4. 编写API控制器

创建控制器暴露接口:

[ApiController]
[Route("api/filemanager")]
public class FileManagerController : ControllerBase
{
    private readonly FileManagerService _fileService;

    public FileManagerController(FileManagerService fileService)
    {
        _fileService = fileService;
    }

    [HttpGet("files")]
    public IActionResult GetFiles([FromQuery] string path = "")
    {
        try
        {
            var items = _fileService.GetItems(path);
            return Ok(new FileManagerResponse { Files = items, Success = true });
        }
        catch (Exception ex)
        {
            return Ok(new FileManagerResponse { Error = ex.Message, Success = false });
        }
    }

    [HttpPost("upload")]
    public async Task<IActionResult> Upload([FromForm] IFormFile file, [FromForm] string path = "")
    {
        try
        {
            await _fileService.Upload(file, path);
            return Ok(new FileManagerResponse { Success = true });
        }
        catch (Exception ex)
        {
            return Ok(new FileManagerResponse { Error = ex.Message, Success = false });
        }
    }

    [HttpPost("create")]
    public IActionResult CreateFolder([FromForm] string name, [FromForm] string path = "")
    {
        try
        {
            var success = _fileService.CreateFolder(name, path);
            return Ok(new FileManagerResponse { Success = success });
        }
        catch (Exception ex)
        {
            return Ok(new FileManagerResponse { Error = ex.Message, Success = false });
        }
    }

    [HttpGet("download")]
    public IActionResult Download([FromQuery] string path)
    {
        var fullPath = Path.Combine(_fileService.RootDirectory, path);
        if (!System.IO.File.Exists(fullPath))
            return NotFound();

        var fileBytes = System.IO.File.ReadAllBytes(fullPath);
        var fileName = Path.GetFileName(fullPath);
        return File(fileBytes, "application/octet-stream", fileName);
    }

    // 补充实现rename、move、copy、delete等接口
}

5. 前端配置与注意事项

  • 在Angular组件中配置后端API根路径:
    public hostUrl: string = 'api/filemanager';
    
  • 权限控制:若需限制用户访问范围,可在控制器中添加身份验证(如JWT),动态调整用户可访问的根目录。
  • 文件大小限制:在Program.cs中配置上传大小:
    builder.Services.Configure<FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 104857600; // 允许最大100MB上传
    });
    
  • 跨域处理:前后端域名不同时,在Program.cs中配置CORS:
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("AllowAngular",
            policy => policy.WithOrigins("http://localhost:4200")
                            .AllowAnyHeader()
                            .AllowAnyMethod());
    });
    // 启用CORS
    app.UseCors("AllowAngular");
    

内容的提问来源于stack exchange,提问作者CapedCrusader01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:07:03