ScreenController.cs 5.9 KB

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