|
@@ -1,7 +1,11 @@
|
|
|
-using Microsoft.AspNetCore.Mvc;
|
|
|
+using HTEXScreen.Service;
|
|
|
+using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
using PuppeteerSharp;
|
|
|
using System.Runtime.InteropServices;
|
|
|
+using System.Text;
|
|
|
+using System.Text.Json;
|
|
|
+using System.Text.RegularExpressions;
|
|
|
using System.Web;
|
|
|
|
|
|
namespace HTEXScreen.Controllers
|
|
@@ -10,11 +14,37 @@ namespace HTEXScreen.Controllers
|
|
|
[Route("screen")]
|
|
|
public class ScreenController : ControllerBase
|
|
|
{
|
|
|
+ private readonly AzureStorageFactory _azureStorage;
|
|
|
private readonly HttpClient _httpClient;
|
|
|
- public ScreenController(HttpClient httpClient) {
|
|
|
+ public ScreenController(HttpClient httpClient, AzureStorageFactory azureStorage) {
|
|
|
_httpClient = httpClient;
|
|
|
+ _azureStorage = azureStorage;
|
|
|
+ }
|
|
|
+ [HttpPost("testbase64")]
|
|
|
+ public async Task<IActionResult> TestBase64(JsonElement json ) {
|
|
|
+ JsonSerializerOptions option = new System.Text.Json.JsonSerializerOptions
|
|
|
+ {
|
|
|
+ Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
|
+ };
|
|
|
+ string name = "dataid";
|
|
|
+ var reg = $"(?<=\\b{name}=)[^&]*";
|
|
|
+ Regex regex = new Regex(reg);
|
|
|
+ string decode= HttpUtility.UrlDecode("https://localhost:7298/swagger/index.html?dataid=%E5%BC%A0%E5%90%8C%E5%AD%A6&bs64=1234567&dataid=%E6%9D%8E%E5%90%8C%E5%AD%A6");
|
|
|
+ Match match= Regex.Match(decode, reg);
|
|
|
+ string a = "";
|
|
|
+ while (match.Success)
|
|
|
+ {
|
|
|
+ a =a+$"{match.Value}";
|
|
|
+ match = match.NextMatch();
|
|
|
+ }
|
|
|
+ string s = JsonSerializer.Serialize(json, option);
|
|
|
+ string das= HttpUtility.UrlEncode(s,Encoding.UTF8);
|
|
|
+ byte[] byts = Encoding.UTF8.GetBytes(s);
|
|
|
+ var rdata = Convert.ToBase64String(byts);
|
|
|
+ byte[] bs = Convert.FromBase64String(rdata);
|
|
|
+ string data = Encoding.UTF8.GetString(bs);
|
|
|
+ return Ok(new { a, rdata,das });
|
|
|
}
|
|
|
-
|
|
|
[HttpGet("download")]
|
|
|
public async Task<IActionResult> Download([FromQuery] ScreenshotDto screenshot) {
|
|
|
try {
|
|
@@ -157,7 +187,7 @@ namespace HTEXScreen.Controllers
|
|
|
int pagesize = 20;
|
|
|
if (screenshot.urls.Count <= pagesize)
|
|
|
{
|
|
|
- await PageToPdfStream(screenshot.urls,browser,viewPortOptions,pdfOptions);
|
|
|
+ await PageToPdfStream(screenshot.urls,screenshot.fileNameKey,browser,viewPortOptions,pdfOptions);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -166,7 +196,7 @@ namespace HTEXScreen.Controllers
|
|
|
for (int i = 0; i < pages; i++)
|
|
|
{
|
|
|
var lists = screenshot.urls.Skip((i) * pagesize).Take(pagesize).ToList();
|
|
|
- tasks.Add(PageToPdfStream(lists, browser, viewPortOptions, pdfOptions));
|
|
|
+ tasks.Add(PageToPdfStream(lists, screenshot.fileNameKey, browser, viewPortOptions, pdfOptions));
|
|
|
}
|
|
|
await Task.WhenAll(tasks);
|
|
|
}
|
|
@@ -195,7 +225,7 @@ namespace HTEXScreen.Controllers
|
|
|
return BadRequest($"{ex.Message}\n{ex.StackTrace}");
|
|
|
}
|
|
|
}
|
|
|
- private async Task PageToPdfStream(List<string> urls, Browser browser, ViewPortOptions viewPortOptions, PdfOptions pdfOptions)
|
|
|
+ private async Task PageToPdfStream(List<string> urls,string fileNameKey, Browser browser, ViewPortOptions viewPortOptions, PdfOptions pdfOptions)
|
|
|
{
|
|
|
List<Task<Page>> pages = new List<Task<Page>>();
|
|
|
urls.ForEach(x => {
|
|
@@ -214,10 +244,25 @@ 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>>();
|
|
|
foreach (var page_task in page_tasks) {
|
|
|
string url = page_task.Url;
|
|
|
+ string[] paths= HttpUtility.UrlDecode(url).Split("/");
|
|
|
+ var reg = $"(?<=\\b{fileNameKey}=)[^&]*";
|
|
|
+ Regex regex = new Regex(reg);
|
|
|
+ string decode = HttpUtility.UrlDecode(url);
|
|
|
+ Match match = Regex.Match(decode, reg);
|
|
|
+ string id = "";
|
|
|
+ while (match.Success)
|
|
|
+ {
|
|
|
+ id = id + $"{match.Value}";
|
|
|
+ match = match.NextMatch();
|
|
|
+ }
|
|
|
+ //需要解析参数。paths[paths.Length-1]
|
|
|
Stream stream = await page_task.PdfStreamAsync(pdfOptions);
|
|
|
+ uploads.Add(_azureStorage.GetBlobContainerClient("teammodelos").UploadFileByContainer(stream, "artreport", $"{id}.pdf", true));
|
|
|
}
|
|
|
+ await Task.WhenAll(uploads);
|
|
|
//page_tasks.ToList().ForEach(x => {
|
|
|
// //string file = $"E://pdfs//{Guid.NewGuid()}.pdf";
|
|
|
// string a = x.Url;
|
|
@@ -248,7 +293,7 @@ namespace HTEXScreen.Controllers
|
|
|
var responses_tasks = await Task.WhenAll(responses);
|
|
|
List<Task> tasks = new List<Task>();
|
|
|
page_tasks.ToList().ForEach(x => {
|
|
|
- string file = $"E://pdfs//{Guid.NewGuid()}.pdf";
|
|
|
+ string file = $"{Guid.NewGuid()}.pdf";
|
|
|
tasks.Add(x.PdfAsync(file, pdfOptions));
|
|
|
});
|
|
|
await Task.WhenAll(tasks);
|
|
@@ -270,5 +315,6 @@ namespace HTEXScreen.Controllers
|
|
|
public int height { get; set; } = 1080;
|
|
|
public string? url { get; set; }
|
|
|
public List<string> urls { get; set; } = new List<string>();
|
|
|
+ public string? fileNameKey { get; set; }
|
|
|
public int delay { get; set; }
|
|
|
}
|