FileService.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Http;
  4. using EasyTemplate.Service.Common;
  5. using EasyTemplate.Tool.Entity;
  6. using Microsoft.AspNetCore.Components;
  7. using EasyTemplate.Tool;
  8. using static EasyTemplate.Tool.Entity.PublicEnum;
  9. using System.Net;
  10. using System;
  11. namespace EasyTemplate.Service;
  12. [ApiGroup(ApiGroupNames.System)]
  13. public class FileService : BaseService
  14. {
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. private readonly IHttpContextAccessor _contextAccessor;
  19. public FileService(IHttpContextAccessor contextAccessor)
  20. {
  21. _contextAccessor = contextAccessor;
  22. }
  23. /// <summary>
  24. /// 上传图片
  25. /// </summary>
  26. /// <param name="classification"></param>
  27. /// <returns></returns>
  28. [HttpPost, AllowAnonymous]
  29. public async Task<object> UploadImage(string classification = "default")
  30. {
  31. var host = _contextAccessor.GetHost();
  32. var file = _contextAccessor.HttpContext.Request.Form.Files[0];
  33. if (file.Length <= 0)
  34. {
  35. return "";
  36. }
  37. using var memoryStream = new MemoryStream();
  38. file.CopyTo(memoryStream);
  39. var fileBytes = memoryStream.ToArray();
  40. // 获取文件扩展名
  41. var fileExtension = Path.GetExtension(file.FileName);
  42. // 生成文件名
  43. var id = Guid.NewGuid().ToString().ToUpper().Replace("-", "");
  44. var fileName = $"{id}{fileExtension}";
  45. // 获取当前日期
  46. var currentDate = DateTime.Now;
  47. // 构建目录路径
  48. var directoryPath = Path.Combine("wwwroot", "image", classification, currentDate.ToString("yyyy"), currentDate.ToString("MM"), currentDate.ToString("dd"));
  49. // 创建目录
  50. if (!Directory.Exists(directoryPath))
  51. {
  52. Directory.CreateDirectory(directoryPath);
  53. }
  54. // 构建文件路径
  55. var filePath = Path.Combine(directoryPath, fileName);
  56. // 保存文件
  57. await System.IO.File.WriteAllBytesAsync(filePath, fileBytes);
  58. // 构建返回的相对路径
  59. var relativePath = $"/image/{classification}/{currentDate:yyyy}/{currentDate:MM}/{currentDate:dd}/{fileName}";
  60. return relativePath;
  61. }
  62. }