如何基于.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
相关产品推荐
相关产品推荐

