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;
}
///
/// 上传到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 });
}
}
}