using Microsoft.AspNetCore.Mvc; using System.Net; using System.Net.Http.Headers; using Microsoft.Extensions.Hosting.Internal; using Microsoft.AspNetCore.Http.Extensions; using IStation.Untity; using Furion.DynamicApiController; using System.ComponentModel.DataAnnotations; using Mapster; using Microsoft.AspNetCore.Http; using Furion.DependencyInjection; using Microsoft.AspNetCore.Authorization; using Furion.DataEncryption; namespace IStation.Application { /// /// File /// [AllowAnonymous] [Route("File")] [ApiDescriptionSettings("File", Name = "文件", Order = 1000)] public class File_Controller : IDynamicApiController, ITransient { private readonly IHttpContextAccessor _httpContextAccessor; /// /// /// public File_Controller(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } #region 上传文件 /// /// 上传文件 /// [Route("UploadFile@V1.0")] [HttpPost] public string UploadFile() { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return string.Empty; } var uploadFile = request.Form.Files[0]; var fileName = FileHelper.UploadFile(uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); return fileName; } /// /// 上传文件到子目录下 /// [Route("UploadSubFile@V1.0")] [HttpPost] public string UploadSubFile ( [Required,DataValidation(AllowEmptyStrings =false)] string Sub ) { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return string.Empty; } var uploadFile = request.Form.Files[0]; var fileName = FileHelper.UploadSubFile(Sub, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); return fileName; } #endregion #region 下载文件 /// /// 下载文件 /// [Route("DownloadFile@V1.0")] [HttpGet] [NonUnify] public HttpResponseMessage DownloadFile ( [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { if (string.IsNullOrEmpty(FileName)) { return new HttpResponseMessage(HttpStatusCode.NoContent); } var file = FileHelper.DownloadFile(FileName); if (file == null) { return new HttpResponseMessage(HttpStatusCode.NoContent); } var result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; } /// /// 下载子目录下的文件 /// [Route("DownloadSubFile@V1.0")] [HttpGet] [NonUnify] public HttpResponseMessage DownloadSubFile ( [Required,DataValidation(AllowEmptyStrings =false)] string Sub, [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { if (string.IsNullOrEmpty(Sub)) { return new HttpResponseMessage(HttpStatusCode.NoContent); } if (string.IsNullOrEmpty(FileName)) { return new HttpResponseMessage(HttpStatusCode.NoContent); } var file = FileHelper.DownloadSubFile(Sub, FileName); if (file == null) { return new HttpResponseMessage(HttpStatusCode.NoContent); } var result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; } #endregion #region 更新文件 /// /// 更新文件 /// [Route("UpdateFile@V1.0")] [HttpPost] public string UpdateFile ( [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return string.Empty; } var uploadFile = request.Form.Files[0]; var code = FileHelper.UpdateFile(FileName, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); return code; } /// /// 更新子文件下的文件 /// [Route("UpdateSubFile@V1.0")] [HttpPost] public string UpdateSubFile ( [Required,DataValidation(AllowEmptyStrings =false)] string Sub, [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return string.Empty; } var uploadFile = request.Form.Files[0]; var code = FileHelper.UpdateSubFile(Sub, FileName, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); return code; } #endregion #region 删除文件 /// /// 删除文件 /// [Route("DeleteFile@V1.0")] [HttpDelete] public bool DeleteFile ( [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { var bol = FileHelper.Delete(FileName); return bol; } /// /// 删除子文件下文件 /// [Route("DeleteSubFile@V1.0")] [HttpDelete] public bool DeleteSubFile ( [Required,DataValidation(AllowEmptyStrings =false)] string Sub, [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { var bol = FileHelper.Delete(Sub, FileName); return bol; } #endregion #region 获取Url /// /// 获取文件Url /// [Route("GetFileUrl@V1.0")] [HttpGet] public string GetFileUrl ( [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { var url = $"http://{_httpContextAccessor.HttpContext.Request.Host}/{FileHelper.GetRelatedFilePath(FileName)}"; return url; } /// /// 获取子文件夹下的文件Url /// [Route("GetSubFileUrl@V1.0")] [HttpGet] public string GetSubFileUrl ( [Required,DataValidation(AllowEmptyStrings =false)] string Sub, [Required,DataValidation(AllowEmptyStrings =false)] string FileName ) { var url = $"http://{_httpContextAccessor.HttpContext.Request.Host}/{FileHelper.GetRelatedFilePath(Sub, FileName)}"; return url; } #endregion } }