123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
- using System.Text.Json;
- using System.Web;
- using TEAMModelOS.SDK.DI;
- namespace HTEX.Complex.Controllers
- {
- [ApiController]
- [Route("miniapp")]
- public class MiniAppController : ControllerBase
- {
- private readonly AzureStorageFactory _azureStorage;
- private readonly HttpClient _httpClient;
- private readonly IConfiguration _configuration;
- public MiniAppController(HttpClient httpClient, AzureStorageFactory azureStorage, IConfiguration configuration)
- {
- _httpClient = httpClient;
- _azureStorage = azureStorage;
- _configuration = configuration;
- // _httpContext=httpContext;
- }
- /// <summary>
- /// 上传到blob
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("from-miniapp-delete")]
- [Authorize(Roles = "AClassONE")]
- [RequestSizeLimit(102_400_000_00)] //最大10000m左右
- public async Task<IActionResult> FromMiniAPPDelete(JsonElement json)
- {
- List<string>? urls = json.GetProperty("urls").Deserialize<List<string>>();
- 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);
- }
- /// <summary>
- /// 上传到blob
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("from-miniapp-v2")]
- [Authorize(Roles = "AClassONE")]
- [RequestSizeLimit(102_400_000_00)] //最大10000m左右
- public async Task<IActionResult> FromMiniAPPV2()
- {
- try
- {
- List<dynamic> urls = new List<dynamic>();
- 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 });
- }
- }
- /// <summary>
- /// 上传到blob
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("from-miniapp")]
- [Authorize(Roles = "AClassONE")]
- [RequestSizeLimit(102_400_000_00)] //最大10000m左右
- public async Task<IActionResult> FromMiniAPP([FromForm] IFormFile[] files, [FromForm] string path, [FromForm] string cnt, [FromForm] string test)
- {
- List<string> urls = new List<string>();
- 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 });
- }
- }
- }
|