using FileStorage.Repository.SqlSugar; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.Options; using SqlSugar; using XF.Domain.Authentications; namespace FileStorage.Host.Controllers { [ApiController] [Route("file")] public class FileController : ControllerBase { private readonly ILogger _logger; private readonly IFileStorage _fileStorage; private readonly ISugarUnitOfWork _uow; public FileController( ILogger logger, IFileStorage fileStorage, ISugarUnitOfWork uow ) { _logger = logger; _fileStorage = fileStorage; _uow = uow; } /// /// 内部调用,不限制文件格式 /// /// /// /// [HttpPost("uploadinside")] public async Task UploadInside(IFormFile fileData, string source) { var file = await _fileStorage.UploadAsync(fileData.FileName, fileData.Length, "", fileData.OpenReadStream(), source ?? string.Empty, false); var Path = await _fileStorage.GetFileUrlIndefinitelyAsync(file.Id, source ?? string.Empty); return Ok(new { Id = file.Id, fileName = file.FileName, Path = Path }); } /// /// 限制文件格式 /// /// /// /// [HttpPost("upload")] public async Task Upload(IFormFile fileData, string source) { var file = await _fileStorage.UploadAsync(fileData.FileName, fileData.Length, "", fileData.OpenReadStream(), source ?? string.Empty, true); var Path = await _fileStorage.GetFileUrlIndefinitelyAsync(file.Id, source ?? string.Empty); return Ok(new { Id = file.Id, fileName = file.FileName, Path = Path }); } [HttpGet("getfileurl")] public async Task GetFileUrl([FromQuery] UploadGetDto dto) { var uri = await _fileStorage.GetFileUrlAsync(dto.Id, dto.Source ?? string.Empty); return Ok(new { Uri = uri }); } [HttpGet("downloadfile")] public async Task DownLoadFile([FromQuery] UploadGetDto dto) { var (stream, content, fileName) = _fileStorage.DownLoadFile(dto.Id); if (stream != null) { return File(stream, content, fileName); } return null; } [HttpGet("delfile")] public async Task DelFile([FromQuery] UploadGetDto dto) { return await _fileStorage.DelFileAsync(dto.Id, dto.Source ?? string.Empty); } [HttpGet("file_path")] public async Task GetFilePath([FromQuery] UploadGetDto dto) { var uri = await _fileStorage.GetFilePathAsync(dto.Id, dto.Source ?? string.Empty); return Ok(new { Path = uri }); } [HttpGet("createdb")] public Task CreateDb() { var db = _uow.Db; db.DbMaintenance.CreateDatabase(); db.CodeFirst.InitTables(); return Task.CompletedTask; } /// /// 访问文件 /// /// /// /// /// /// [AllowAnonymous] [HttpGet("files")] public async Task Files(string id, string expires, string clientid, string signature) { var fullPath = await _fileStorage.GetFilePath(id, expires, clientid, signature); HttpContext.Response.ContentType = "application/octet-stream"; await HttpContext.Response.SendFileAsync(fullPath); } /// /// 访问文件无限期 /// /// /// /// /// /// [AllowAnonymous] [HttpGet("files_indefinitely")] public async Task FilesIndefinitely(string id, string expires, string clientid, string signature) { var fullPath = await _fileStorage.GetFilePathIndefinitely(id, expires, clientid, signature); HttpContext.Response.ContentType = "application/octet-stream"; await HttpContext.Response.SendFileAsync(fullPath); } [HttpGet("test")] [AllowAnonymous] public string Test() { return DateTime.Now.ToString(); } } }