MiniAppController.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System.Text.Json;
  4. using System.Web;
  5. using TEAMModelOS.SDK.DI;
  6. namespace HTEX.Complex.Controllers
  7. {
  8. [ApiController]
  9. [Route("miniapp")]
  10. public class MiniAppController : ControllerBase
  11. {
  12. private readonly AzureStorageFactory _azureStorage;
  13. private readonly HttpClient _httpClient;
  14. private readonly IConfiguration _configuration;
  15. public MiniAppController(HttpClient httpClient, AzureStorageFactory azureStorage, IConfiguration configuration)
  16. {
  17. _httpClient = httpClient;
  18. _azureStorage = azureStorage;
  19. _configuration = configuration;
  20. // _httpContext=httpContext;
  21. }
  22. /// <summary>
  23. /// 上传到blob
  24. /// </summary>
  25. /// <param name="request"></param>
  26. /// <returns></returns>
  27. [HttpPost("from-miniapp-delete")]
  28. [Authorize(Roles = "AClassONE")]
  29. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  30. public async Task<IActionResult> FromMiniAPPDelete(JsonElement json)
  31. {
  32. List<string>? urls = json.GetProperty("urls").Deserialize<List<string>>();
  33. string? cnt = json.GetProperty("cnt").GetString();
  34. string? test = json.GetProperty("test").GetString();
  35. if (urls!=null)
  36. {
  37. foreach (var url in urls)
  38. {
  39. string dev = "Default";
  40. if (test.Equals("Test", StringComparison.OrdinalIgnoreCase))
  41. {
  42. dev="Test";
  43. }
  44. string uri = url.Split("?")[0];
  45. var blobinfo = BlobUrlString(uri);
  46. if (blobinfo.ContainerName.Equals(cnt))
  47. {
  48. var uld = HttpUtility.UrlDecode(blobinfo.blob);
  49. bool ds = await _azureStorage.GetBlobContainerClient(cnt, dev).DeleteBlobIfExistsAsync(uld);
  50. }
  51. }
  52. }
  53. return Ok();
  54. }
  55. private static (string ContainerName, string blob) BlobUrlString(string sasUrl)
  56. {
  57. sasUrl = sasUrl.Substring(8);
  58. string[] sasUrls = sasUrl.Split("/");
  59. string ContainerName;
  60. ContainerName = sasUrls[1].Clone().ToString();
  61. string item = sasUrls[0] + "/" + sasUrls[1] + "/";
  62. string blob = sasUrl.Replace(item, "");
  63. return (ContainerName, blob);
  64. }
  65. /// <summary>
  66. /// 上传到blob
  67. /// </summary>
  68. /// <param name="request"></param>
  69. /// <returns></returns>
  70. [HttpPost("from-miniapp-v2")]
  71. [Authorize(Roles = "AClassONE")]
  72. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  73. public async Task<IActionResult> FromMiniAPPV2()
  74. {
  75. try
  76. {
  77. List<dynamic> urls = new List<dynamic>();
  78. var request = HttpContext.Request;
  79. var files = request.Form.Files;
  80. var cnt = request.Form["cnt"].ToString();
  81. var test = request.Form["test"].ToString();
  82. var path = request.Form["path"].ToString();
  83. foreach (var file in files)
  84. {
  85. string dev = "Default";
  86. if (test.Equals("Test", StringComparison.OrdinalIgnoreCase))
  87. {
  88. dev="Test";
  89. }
  90. if (path.EndsWith("/"))
  91. {
  92. path=path.Substring(0, path.Length -1);
  93. }
  94. (string name, string url) = await _azureStorage.GetBlobContainerClient(cnt, dev).UploadFileByContainerBName(file.OpenReadStream(), path, $"{file.FileName}", true);
  95. var auth = _azureStorage.GetBlobContainerClient(cnt, dev).GetBlobSasUriRead(_configuration, cnt, name, dev);
  96. var ext = file.FileName.Split(".");
  97. urls.Add(new { url = $"{url}?{auth.sas}", name = file.FileName, size = file.Length, extension = ext[ext.Length-1], type = file.ContentType.Split("/")[0], blob = name, cnt = cnt });
  98. }
  99. return Ok(new { code = 200, urls, });
  100. }
  101. catch (Exception vErr)
  102. {
  103. return Ok(new { code = 500, msg = vErr.Message });
  104. }
  105. }
  106. /// <summary>
  107. /// 上传到blob
  108. /// </summary>
  109. /// <param name="request"></param>
  110. /// <returns></returns>
  111. [HttpPost("from-miniapp")]
  112. [Authorize(Roles = "AClassONE")]
  113. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  114. public async Task<IActionResult> FromMiniAPP([FromForm] IFormFile[] files, [FromForm] string path, [FromForm] string cnt, [FromForm] string test)
  115. {
  116. List<string> urls = new List<string>();
  117. foreach (var file in files)
  118. {
  119. string dev = "Default";
  120. if (test.Equals("Test", StringComparison.OrdinalIgnoreCase))
  121. {
  122. dev="Test";
  123. }
  124. if (path.EndsWith("/"))
  125. {
  126. path=path.Substring(0, path.Length -1);
  127. }
  128. (string name, string url) = await _azureStorage.GetBlobContainerClient(cnt, dev).UploadFileByContainerBName(file.OpenReadStream(), path, $"{file.FileName}", true);
  129. var auth = _azureStorage.GetBlobContainerClient(cnt, dev).GetBlobSasUriRead(_configuration, cnt, name, dev);
  130. urls.Add($"{url}?{auth.sas}");
  131. }
  132. return Ok(new { urls });
  133. }
  134. }
  135. }