|
@@ -29,6 +29,9 @@ using HTEXLib.DOCX.Models;
|
|
|
using System.Collections.Concurrent;
|
|
|
using TEAMModelOS.Filter;
|
|
|
using Ionic.Zip;
|
|
|
+using HTEXLib.COMM;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
+using TEAMModelOS.Models;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers
|
|
|
{
|
|
@@ -40,13 +43,14 @@ namespace TEAMModelOS.Controllers
|
|
|
|
|
|
public PPTX2HTEXTranslator _PPTX2HTEXTranslator { get; set; }
|
|
|
public DOXC2HTMLTranslator _DOXC2HTMLTranslator { get; set; }
|
|
|
-
|
|
|
+ private readonly Option _option;
|
|
|
public AzureStorageFactory _azureStorage { get; set; }
|
|
|
private readonly IHttpClientFactory _clientFactory;
|
|
|
public HTML2ITEMV3Translator _HTML2ITEMV3Translator { get; set; }
|
|
|
public ImportController(
|
|
|
PPTX2HTEXTranslator PPTX2HTEXTranslator, IHttpClientFactory clientFactory,
|
|
|
- DOXC2HTMLTranslator DOXC2HTMLTranslator, HTML2ITEMV3Translator HTML2ITEMV3Translator, AzureStorageFactory azureStorage, DingDing ding)
|
|
|
+ DOXC2HTMLTranslator DOXC2HTMLTranslator, HTML2ITEMV3Translator HTML2ITEMV3Translator, AzureStorageFactory azureStorage, DingDing ding,
|
|
|
+ IOptionsSnapshot<Option> option, AzureCosmosFactory azureCosmos)
|
|
|
{
|
|
|
_HTML2ITEMV3Translator = HTML2ITEMV3Translator;
|
|
|
_DOXC2HTMLTranslator = DOXC2HTMLTranslator;
|
|
@@ -54,6 +58,7 @@ namespace TEAMModelOS.Controllers
|
|
|
_azureStorage = azureStorage;
|
|
|
this._PPTX2HTEXTranslator = PPTX2HTEXTranslator;
|
|
|
_dingDing = ding;
|
|
|
+ _option = option?.Value;
|
|
|
|
|
|
}
|
|
|
private static string ReplaceLast(string input, string oldValue, string newValue)
|
|
@@ -119,7 +124,7 @@ namespace TEAMModelOS.Controllers
|
|
|
if (ext.ToLower() == "pptx" || ext.ToLower() == "xml")
|
|
|
{
|
|
|
string index = await PPTXTranslator(containerid, FileName, stream);
|
|
|
- // await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
|
|
|
+ // await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
|
|
|
return Ok(new { index = index });
|
|
|
}
|
|
|
else if (ext.ToLower() == "docx" || ext.ToLower() == "doc")
|
|
@@ -130,7 +135,7 @@ namespace TEAMModelOS.Controllers
|
|
|
else if (ext.ToLower() == "htex")
|
|
|
{
|
|
|
var index = await HTEXTranslator(containerid, FileName, stream);
|
|
|
- //await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
|
|
|
+ //await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
|
|
|
return Ok(new { index = index });
|
|
|
}
|
|
|
else
|
|
@@ -241,17 +246,25 @@ namespace TEAMModelOS.Controllers
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("upload-word")]
|
|
|
[RequestSizeLimit(102_400_000_00)] //最大10000m左右
|
|
|
- public IActionResult UploadWord([FromForm] IFormFile file)
|
|
|
+ public async Task<IActionResult> UploadWord([FromForm] IFormFile file)
|
|
|
{
|
|
|
// ResponseBuilder responseBuilder = new ResponseBuilder();
|
|
|
if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
|
|
|
{
|
|
|
return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
|
|
|
}
|
|
|
-
|
|
|
- var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
|
|
|
- // Dictionary<string, object> model = await ImportExerciseService.UploadWord(_azureStorage, file);
|
|
|
- return Ok(new { htmlString = doc });
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
|
|
|
+ // Dictionary<string, object> model = await ImportExerciseService.UploadWord(_azureStorage, file);
|
|
|
+ return Ok(new { htmlString = doc });
|
|
|
+ }
|
|
|
+ catch (TransException ex)
|
|
|
+ {
|
|
|
+ var data = await _azureStorage.UploadFileByContainer("teammodelos", file.OpenReadStream(), "transfailed", Guid.NewGuid() + file.FileName);
|
|
|
+ await _dingDing.SendBotMsg($"IES5,{_option.Location},upload-word()\n{ex.Message}{ex.StackTrace}转换失败的文件:{data}", GroupNames.醍摩豆服務運維群組);
|
|
|
+ return BadRequest(new { data });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -260,17 +273,24 @@ namespace TEAMModelOS.Controllers
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("parse-word")]
|
|
|
- public IActionResult ParseWord([FromForm] IFormFile file)
|
|
|
+ public async Task<IActionResult> ParseWord([FromForm] IFormFile file)
|
|
|
{
|
|
|
if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
|
|
|
{
|
|
|
return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
|
|
|
}
|
|
|
- var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
|
|
|
-
|
|
|
- (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
|
|
|
-
|
|
|
- return Ok(new { tests, emferror = error });
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
|
|
|
+ (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
|
|
|
+ return Ok(new { tests, emferror = error });
|
|
|
+ }
|
|
|
+ catch (TransException ex)
|
|
|
+ {
|
|
|
+ var data = await _azureStorage.UploadFileByContainer("teammodelos", file.OpenReadStream(), "transfailed", Guid.NewGuid() + file.FileName);
|
|
|
+ await _dingDing.SendBotMsg($"IES5,{_option.Location},parse-word()\n{ex.Message}{ex.StackTrace}转换失败的文件:{data}", GroupNames.醍摩豆服務運維群組);
|
|
|
+ return BadRequest(new { data });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -280,15 +300,23 @@ namespace TEAMModelOS.Controllers
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("parse-docx")]
|
|
|
- public IActionResult ParseDocx([FromForm] IFormFile file)
|
|
|
+ public async Task<IActionResult> ParseDocx([FromForm] IFormFile file)
|
|
|
{
|
|
|
if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
|
|
|
{
|
|
|
return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
|
|
|
}
|
|
|
- var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
|
|
|
- // (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
|
|
|
- return Ok(new { html = doc });
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
|
|
|
+ return Ok(new { html = doc });
|
|
|
+ }
|
|
|
+ catch (TransException ex)
|
|
|
+ {
|
|
|
+ var data = await _azureStorage.UploadFileByContainer("teammodelos", file.OpenReadStream(), "transfailed", Guid.NewGuid() + file.FileName);
|
|
|
+ await _dingDing.SendBotMsg($"IES5,{_option.Location},parse-docx()\n{ex.Message}{ex.StackTrace}转换失败的文件:{data}", GroupNames.醍摩豆服務運維群組);
|
|
|
+ return BadRequest(new { data });
|
|
|
+ }
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// html转题目
|