FileController.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net.Http;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Web;
  9. using System.Web.Http;
  10. using XdCxRhDw.Dto;
  11. namespace XdCxRhDW.WebApi.Controllers
  12. {
  13. /// <summary>
  14. /// 检测参估功能相关接口
  15. /// </summary>
  16. public class FileController : BaseController
  17. {
  18. private readonly string uploadFolder;
  19. /// <summary>
  20. ///
  21. /// </summary>
  22. public FileController()
  23. {
  24. this.uploadFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot");
  25. }
  26. /// <summary>
  27. /// 上传文件
  28. /// </summary>
  29. /// <param name="file">文件</param>
  30. /// <returns></returns>
  31. [HttpPost, SwaggerForm]
  32. public async Task<AjaxResult<FileUploadResDto>> UploadFileAsync(HttpPostedFileBase httpFile)
  33. {
  34. //if (!Request.Content.IsMimeMultipartContent("form-data"))
  35. //{
  36. // return Error<FileDto>("请求数据不是multipart/form-data类型");
  37. //}
  38. var provider = new MultipartMemoryStreamProvider();
  39. await Request.Content.ReadAsMultipartAsync(provider);
  40. Directory.CreateDirectory(uploadFolder);
  41. var content = provider.Contents.First();
  42. var fileName = Guid.NewGuid().ToString() + ".dat";
  43. var fileData = await content.ReadAsByteArrayAsync();
  44. FileUploadResDto fileDto = new FileUploadResDto();
  45. fileDto.FileName = fileName;
  46. // 将文件保存到本地文件夹中
  47. var filePath = Path.Combine(uploadFolder, fileName);
  48. using (var fileStream = new FileStream(filePath, FileMode.Create))
  49. {
  50. await fileStream.WriteAsync(fileData, 0, fileData.Length);
  51. }
  52. //清除1个小时之前的文件
  53. _ = Task.Run(() => {
  54. var files=Directory.EnumerateFiles(uploadFolder);
  55. foreach (var file in files)
  56. {
  57. FileInfo info=new FileInfo(file);
  58. if (info.CreationTime<DateTime.Now.AddHours(-1))
  59. {
  60. try
  61. {
  62. info.Delete();
  63. }
  64. catch
  65. {
  66. }
  67. }
  68. }
  69. });
  70. return Success(fileDto);
  71. }
  72. /// <summary>
  73. /// 文件下载
  74. /// </summary>
  75. /// <param name="dto">文件下载参数,值来自文件上传返回的结果</param>
  76. /// <returns></returns>
  77. [HttpPost]
  78. public async Task<AjaxResult<byte[]>> DownloadFileAsync(FileDownloadDto dto)
  79. {
  80. string file=Path.Combine(uploadFolder, dto.FileName);
  81. var data=File.ReadAllBytes(file);
  82. return Success(data);
  83. }
  84. }
  85. }