|
@@ -1,8 +1,12 @@
|
|
|
using HTEXScreen.Service;
|
|
|
+using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
using PuppeteerSharp;
|
|
|
using PuppeteerSharp.Media;
|
|
|
+using System.Configuration;
|
|
|
+using System.Drawing;
|
|
|
+using System.IO;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Text;
|
|
|
using System.Text.Json;
|
|
@@ -15,12 +19,133 @@ namespace HTEXScreen.Controllers
|
|
|
[Route("screen")]
|
|
|
public class ScreenController : ControllerBase
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
private readonly AzureStorageFactory _azureStorage;
|
|
|
private readonly HttpClient _httpClient;
|
|
|
- public ScreenController(HttpClient httpClient, AzureStorageFactory azureStorage) {
|
|
|
+ private readonly IConfiguration _configuration;
|
|
|
+ // private readonly HttpContext _httpContext;
|
|
|
+ public ScreenController(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).UploadFileByContainer(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).UploadFileByContainer(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 });
|
|
|
+ }
|
|
|
+
|
|
|
[HttpPost("testbase64")]
|
|
|
public async Task<IActionResult> TestBase64(JsonElement json ) {
|
|
|
JsonSerializerOptions option = new System.Text.Json.JsonSerializerOptions
|
|
@@ -190,7 +315,7 @@ namespace HTEXScreen.Controllers
|
|
|
//};
|
|
|
PdfOptions pdfOptions = new PdfOptions { DisplayHeaderFooter = true, FooterTemplate = "", PreferCSSPageSize = true, Format = PaperFormat.A4 };
|
|
|
//ScreenshotOptions screenshotOptions= new ScreenshotOptions { FullPage = fullPage, BurstMode = true };
|
|
|
- List<string> urls = new List<string>();
|
|
|
+ List<(string name ,string url )> urls = new List<(string name, string url)>();
|
|
|
|
|
|
if (screenshot.urls.Count <= screenshot.pagesize)
|
|
|
{
|
|
@@ -198,7 +323,7 @@ namespace HTEXScreen.Controllers
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- List<Task<List<string>>> tasks = new List<Task<List<string>>>();
|
|
|
+ List<Task<List<(string name, string url)>>> tasks = new List<Task<List<(string name, string url)>>>();
|
|
|
int pages = (screenshot.urls.Count + screenshot.pagesize) / screenshot.pagesize;
|
|
|
for (int i = 0; i < pages; i++)
|
|
|
{
|
|
@@ -229,7 +354,7 @@ namespace HTEXScreen.Controllers
|
|
|
//关闭浏览器
|
|
|
await browser.CloseAsync();
|
|
|
await browser.DisposeAsync();
|
|
|
- return Ok(new { urls });
|
|
|
+ return Ok(new { urls= urls.Select(z=>z.url) });
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -245,7 +370,7 @@ namespace HTEXScreen.Controllers
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- private async Task<List<string>> PageToPdfStream(List<string> urls,string fileNameKey,string cnt,string root,string env , Browser browser, ViewPortOptions viewPortOptions, PdfOptions pdfOptions)
|
|
|
+ private async Task<List<(string name ,string url )>> PageToPdfStream(List<string> urls,string fileNameKey,string cnt,string root,string env , Browser browser, ViewPortOptions viewPortOptions, PdfOptions pdfOptions)
|
|
|
{
|
|
|
string name= env.Equals("release")? "Default" : "Test";
|
|
|
List<Task<Page>> pages = new List<Task<Page>>();
|
|
@@ -265,7 +390,7 @@ namespace HTEXScreen.Controllers
|
|
|
var responses_tasks = await Task.WhenAll(responses);
|
|
|
//List<Task<Stream>> streams = new List<Task<Stream>>();
|
|
|
List<Task> tasks = new List<Task>();
|
|
|
- List<Task<string>> uploads = new List<Task<string>>();
|
|
|
+ List<Task<(string name , string url )>> uploads = new List<Task<(string name, string url)>>();
|
|
|
foreach (var page_task in page_tasks) {
|
|
|
string url = page_task.Url;
|
|
|
string[] paths= HttpUtility.UrlDecode(url).Split("/");
|
|
@@ -289,7 +414,7 @@ namespace HTEXScreen.Controllers
|
|
|
uploads.Add(_azureStorage.GetBlobContainerClient(cnt, name).UploadFileByContainer(stream, root, $"{id}.pdf", true));
|
|
|
}
|
|
|
}
|
|
|
- string[] uploadUrls= await Task.WhenAll(uploads);
|
|
|
+ (string name, string url) []uploadUrls= await Task.WhenAll(uploads);
|
|
|
page_tasks.ToList().ForEach(x => {
|
|
|
tasks.Add(x.DisposeAsync().AsTask());
|
|
|
});
|