using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Configuration; using System.Drawing; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Text.Json; using System.Text.RegularExpressions; using System.Web; using TEAMModelOS.SDK.DI; namespace HTEX.Screen.Controllers { [ApiController] [Route("screen")] public class ScreenController : ControllerBase { private readonly AzureStorageFactory _azureStorage; private readonly HttpClient _httpClient; private readonly IConfiguration _configuration; // private readonly HttpContext _httpContext; public ScreenController(HttpClient httpClient, AzureStorageFactory azureStorage, IConfiguration configuration) { _httpClient = httpClient; _azureStorage = azureStorage; _configuration = configuration; // _httpContext=httpContext; } /// /// 上传到blob /// /// /// [HttpPost("from-miniapp-delete")] [Authorize(Roles = "AClassONE")] [RequestSizeLimit(102_400_000_00)] //最大10000m左右 public async Task FromMiniAPPDelete(JsonElement json) { List? urls = json.GetProperty("urls").Deserialize>(); string? cnt = json.GetProperty("cnt").GetString(); string? test = json.GetProperty("test").GetString(); if (urls!=null) { foreach (var url in urls) { string dev = "Default"; if (test.Equals("Test", StringComparison.OrdinalIgnoreCase)) { dev="Test"; } string uri = url.Split("?")[0]; var blobinfo = BlobUrlString(uri); if (blobinfo.ContainerName.Equals(cnt)) { var uld = HttpUtility.UrlDecode(blobinfo.blob); bool ds = await _azureStorage.GetBlobContainerClient(cnt, dev).DeleteBlobIfExistsAsync(uld); } } } return Ok(); } private static (string ContainerName, string blob) BlobUrlString(string sasUrl) { sasUrl = sasUrl.Substring(8); string[] sasUrls = sasUrl.Split("/"); string ContainerName; ContainerName = sasUrls[1].Clone().ToString(); string item = sasUrls[0] + "/" + sasUrls[1] + "/"; string blob = sasUrl.Replace(item, ""); return (ContainerName, blob); } /// /// 上传到blob /// /// /// [HttpPost("from-miniapp-v2")] [Authorize(Roles = "AClassONE")] [RequestSizeLimit(102_400_000_00)] //最大10000m左右 public async Task FromMiniAPPV2() { try { List urls = new List(); var request = HttpContext.Request; var files = request.Form.Files; var cnt = request.Form["cnt"].ToString(); var test = request.Form["test"].ToString(); var path = request.Form["path"].ToString(); foreach (var file in files) { string dev = "Default"; if (test.Equals("Test", StringComparison.OrdinalIgnoreCase)) { dev="Test"; } if (path.EndsWith("/")) { path=path.Substring(0, path.Length -1); } (string name, string url) = await _azureStorage.GetBlobContainerClient(cnt, dev).UploadFileByContainerBName(file.OpenReadStream(), path, $"{file.FileName}", true); var auth = _azureStorage.GetBlobContainerClient(cnt, dev).GetBlobSasUriRead(_configuration, cnt, name, dev); var ext = file.FileName.Split("."); 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 }); } return Ok(new { code = 200, urls, }); } catch (Exception vErr) { return Ok(new { code = 500, msg = vErr.Message }); } } /// /// 上传到blob /// /// /// [HttpPost("from-miniapp")] [Authorize(Roles = "AClassONE")] [RequestSizeLimit(102_400_000_00)] //最大10000m左右 public async Task FromMiniAPP([FromForm] IFormFile[] files, [FromForm] string path, [FromForm] string cnt, [FromForm] string test) { List urls = new List(); foreach (var file in files) { string dev = "Default"; if (test.Equals("Test", StringComparison.OrdinalIgnoreCase)) { dev="Test"; } if (path.EndsWith("/")) { path=path.Substring(0, path.Length -1); } (string name, string url) = await _azureStorage.GetBlobContainerClient(cnt, dev).UploadFileByContainerBName(file.OpenReadStream(), path, $"{file.FileName}", true); var auth = _azureStorage.GetBlobContainerClient(cnt, dev).GetBlobSasUriRead(_configuration, cnt, name, dev); urls.Add($"{url}?{auth.sas}"); } return Ok(new { urls }); } } }