FileController.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. /// <returns></returns>
  30. [HttpPost, SwaggerForm]
  31. public async Task<AjaxResult<FileUploadResDto>> UploadFileAsync()
  32. {
  33. if (!Request.Content.IsMimeMultipartContent("form-data"))
  34. {
  35. bool s=Request.Content.IsFormData();
  36. return Error<FileUploadResDto>("请求数据不是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. }
  73. }