using Microsoft.AspNetCore.Mvc; using IStation.Model.Api; using System.Net; using System.Net.Http.Headers; using Microsoft.Extensions.Hosting.Internal; using Microsoft.AspNetCore.Http.Extensions; namespace IStation.WebApi.Controllers.V1 { [ApiController] [Route("v1/Standard/File")] [ApiExplorerSettings(GroupName = "v1")] public class File_StandardController : ControllerBase { #region 上传文件 /// /// 上传文件 /// [Route("UploadFile")] [HttpPost] public Result UploadFile() { var request = HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return new Result(Code.Error, "未检索到上传的文件"); } var uploadFile = request.Form.Files[0]; var fileName = FileHelper.UploadFile(uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); if (string.IsNullOrEmpty(fileName)) { return new Result(Code.Error, "文件上传失败"); } return new Result(fileName); } /// /// 上传文件到子目录下 /// [Route("UploadSubFile")] [HttpPost] public Result UploadSubFile(string Sub) { if (string.IsNullOrEmpty(Sub)) { return new Result(Code.Error, "Sub 参数错误"); } var request = HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return new Result(Code.Error, "未检索到上传的文件"); } var uploadFile = request.Form.Files[0]; var fileName = FileHelper.UploadSubFile(Sub, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); if (string.IsNullOrEmpty(fileName)) { return new Result(Code.Error, "文件上传失败"); } return new Result(fileName); } #endregion #region 下载文件 /// /// 下载文件 /// [Route("DownloadFile")] [HttpGet] public HttpResponseMessage DownloadFile(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")] [HttpGet] public HttpResponseMessage DownloadSubFile(string Sub, 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")] [HttpPost] public Result UpdateFile(string FileName) { if (string.IsNullOrEmpty(FileName)) { return new Result(Code.Error, "FileName 参数错误"); } var request = HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return new Result(Code.Error, "未检索到上传的文件"); } var uploadFile = request.Form.Files[0]; var code = FileHelper.UpdateFile(FileName, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); if (string.IsNullOrEmpty(code)) { return new Result(Code.Error, "文件更新失败"); } return new Result(code); } /// /// 更新子文件下的文件 /// [Route("UpdateSubFile")] [HttpPost] public Result UpdateSubFile(string Sub, string FileName) { if (string.IsNullOrEmpty(Sub)) { return new Result(Code.Error, "Sub 参数错误"); } if (string.IsNullOrEmpty(FileName)) { return new Result(Code.Error, "FileName 参数错误"); } var request = HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return new Result(Code.Error, "未检索到上传的文件"); } var uploadFile = request.Form.Files[0]; var code = FileHelper.UpdateSubFile(Sub, FileName, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); if (string.IsNullOrEmpty(code)) return new Result(Code.Error, "文件更新失败"); return new Result(code); } #endregion #region 删除文件 /// /// 删除文件 /// [Route("DeleteFile")] [HttpDelete] public Result DeleteFile(string FileName) { if (string.IsNullOrEmpty(FileName)) { return new Result(Code.Error, "FileName 参数错误"); } var bol = FileHelper.Delete(FileName); return new Result(bol); } /// /// 删除子文件下文件 /// [Route("DeleteSubFile")] [HttpDelete] public Result DeleteSubFile(string Sub, string FileName) { if (string.IsNullOrEmpty(Sub)) { return new Result(Code.Error, "Sub 参数错误"); } if (string.IsNullOrEmpty(FileName)) { return new Result(Code.Error, "FileName 参数错误"); } var bol = FileHelper.Delete(Sub, FileName); return new Result(bol); } #endregion #region 获取Url /// /// 获取文件Url /// [Route("GetFileUrl")] [HttpGet] public Result GetFileUrl(string FileName) { if (string.IsNullOrEmpty(FileName)) { return new Result(Code.Alert, "FileName 参数错误"); } var url = $"http://{HttpContext.Request.Host}/{FileHelper.GetRelatedFilePath(FileName)}"; return new Result(url); } /// /// 获取子文件夹下的文件Url /// [Route("GetSubFileUrl")] [HttpGet] public Result GetSubFileUrl(string Sub, string FileName) { if (string.IsNullOrEmpty(FileName)) { return new Result(Code.Alert, "FileName 参数错误"); } var url = $"http://{HttpContext.Request.Host}/{FileHelper.GetRelatedFilePath(Sub, FileName)}"; return new Result(url); } #endregion } }