refine screenshots

This commit is contained in:
Jicheng Lu 2024-08-08 13:50:45 -05:00
parent 1abf3f4aae
commit 3b606974f0
2 changed files with 126 additions and 85 deletions

View file

@ -27,53 +27,16 @@ public partial class LocalFileStorageService
var file = Directory.GetFiles(subDir).FirstOrDefault();
if (file == null) continue;
var contentType = FileUtility.GetFileContentType(file);
var screenshotDir = Path.Combine(subDir, SCREENSHOT_FILE_FOLDER);
var screenshots = await GetScreenshots(file, subDir, messageId, source);
if (screenshots.IsNullOrEmpty()) continue;
if (ExistDirectory(screenshotDir) && !Directory.GetFiles(screenshotDir).IsNullOrEmpty())
{
foreach (var screenshot in Directory.GetFiles(screenshotDir))
{
var fileName = Path.GetFileNameWithoutExtension(screenshot);
var fileExtension = Path.GetExtension(screenshot).Substring(1);
var screenshotContentType = FileUtility.GetFileContentType(screenshot);
var model = new MessageFileModel()
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileStorageUrl = screenshot,
ContentType = screenshotContentType,
FileSource = source
};
files.Add(model);
}
}
else if (contentType == MediaTypeNames.Application.Pdf)
{
var images = await ConvertPdfToImages(file, screenshotDir);
foreach (var image in images)
{
var fileName = Path.GetFileNameWithoutExtension(image);
var fileExtension = Path.GetExtension(image).Substring(1);
var screenshotContentType = FileUtility.GetFileContentType(image);
var model = new MessageFileModel()
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileStorageUrl = image,
ContentType = screenshotContentType,
FileSource = source
};
files.Add(model);
}
}
files.AddRange(screenshots);
}
}
return files;
}
public IEnumerable<MessageFileModel> GetMessageFiles(string conversationId, IEnumerable<string> messageIds,
string source, IEnumerable<string>? contentTypes = null)
{
@ -315,5 +278,62 @@ public partial class LocalFileStorageService
var converters = _services.GetServices<IPdf2ImageConverter>();
return converters.FirstOrDefault();
}
private async Task<IEnumerable<MessageFileModel>> GetScreenshots(string file, string parentDir, string messageId, string source)
{
var files = new List<MessageFileModel>();
try
{
var contentType = FileUtility.GetFileContentType(file);
var screenshotDir = Path.Combine(parentDir, SCREENSHOT_FILE_FOLDER);
if (ExistDirectory(screenshotDir) && !Directory.GetFiles(screenshotDir).IsNullOrEmpty())
{
foreach (var screenshot in Directory.GetFiles(screenshotDir))
{
var fileName = Path.GetFileNameWithoutExtension(screenshot);
var fileExtension = Path.GetExtension(screenshot).Substring(1);
var screenshotContentType = FileUtility.GetFileContentType(screenshot);
var model = new MessageFileModel()
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileStorageUrl = screenshot,
ContentType = screenshotContentType,
FileSource = source
};
files.Add(model);
}
}
else if (contentType == MediaTypeNames.Application.Pdf)
{
var images = await ConvertPdfToImages(file, screenshotDir);
foreach (var image in images)
{
var fileName = Path.GetFileNameWithoutExtension(image);
var fileExtension = Path.GetExtension(image).Substring(1);
var screenshotContentType = FileUtility.GetFileContentType(image);
var model = new MessageFileModel()
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileStorageUrl = image,
ContentType = screenshotContentType,
FileSource = source
};
files.Add(model);
}
}
return files;
}
catch (Exception ex)
{
_logger.LogWarning($"Error when getting message file screenshots {file} (messageId: {messageId}), Error: {ex.Message}\r\n{ex.InnerException}");
return files;
}
}
#endregion
}

View file

@ -26,50 +26,10 @@ public partial class TencentCosService
var file = _cosClient.BucketClient.GetDirFiles(subDir).FirstOrDefault();
if (file == null) continue;
var contentType = FileUtility.GetFileContentType(file);
var screenshotDir = $"{subDir}/{SCREENSHOT_FILE_FOLDER}/";
var screenshots = _cosClient.BucketClient.GetDirFiles(screenshotDir);
if (!screenshots.IsNullOrEmpty())
{
foreach (var screenshot in screenshots)
{
var screenshotContentType = FileUtility.GetFileContentType(screenshot);
var fileName = Path.GetFileNameWithoutExtension(screenshot);
var fileExtension = Path.GetExtension(screenshot).Substring(1);
var model = new MessageFileModel
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileUrl = BuilFileUrl(screenshot),
FileStorageUrl = screenshot,
ContentType = contentType,
FileSource = source
};
files.Add(model);
}
}
else if (contentType == MediaTypeNames.Application.Pdf)
{
var images = await ConvertPdfToImages(file, screenshotDir);
foreach (var image in images)
{
var fileName = Path.GetFileNameWithoutExtension(image);
var fileExtension = Path.GetExtension(image).Substring(1);
var screenshotContentType = FileUtility.GetFileContentType(image);
var model = new MessageFileModel
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileUrl = BuilFileUrl(image),
FileStorageUrl = image,
ContentType = contentType,
FileSource = source
};
files.Add(model);
}
}
var screenshots = await GetScreenshots(file, subDir, messageId, source);
if (screenshots.IsNullOrEmpty()) continue;
files.AddRange(screenshots);
}
}
@ -120,6 +80,8 @@ public partial class TencentCosService
return files;
}
public string GetMessageFile(string conversationId, string messageId, string source, string index, string fileName)
{
var dir = $"{CONVERSATION_FOLDER}/{conversationId}/{FILE_FOLDER}/{source}/{index}/";
@ -299,5 +261,64 @@ public partial class TencentCosService
{
return $"https://{_fullBuketName}.cos.{_settings.Region}.myqcloud.com/{file}";
}
private async Task<IEnumerable<MessageFileModel>> GetScreenshots(string file, string parentDir, string messageId, string source)
{
var files = new List<MessageFileModel>();
try
{
var contentType = FileUtility.GetFileContentType(file);
var screenshotDir = $"{parentDir}/{SCREENSHOT_FILE_FOLDER}/";
var screenshots = _cosClient.BucketClient.GetDirFiles(screenshotDir);
if (!screenshots.IsNullOrEmpty())
{
foreach (var screenshot in screenshots)
{
var screenshotContentType = FileUtility.GetFileContentType(screenshot);
var fileName = Path.GetFileNameWithoutExtension(screenshot);
var fileExtension = Path.GetExtension(screenshot).Substring(1);
var model = new MessageFileModel
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileUrl = BuilFileUrl(screenshot),
FileStorageUrl = screenshot,
ContentType = contentType,
FileSource = source
};
files.Add(model);
}
}
else if (contentType == MediaTypeNames.Application.Pdf)
{
var images = await ConvertPdfToImages(file, screenshotDir);
foreach (var image in images)
{
var fileName = Path.GetFileNameWithoutExtension(image);
var fileExtension = Path.GetExtension(image).Substring(1);
var screenshotContentType = FileUtility.GetFileContentType(image);
var model = new MessageFileModel
{
MessageId = messageId,
FileName = fileName,
FileExtension = fileExtension,
FileUrl = BuilFileUrl(image),
FileStorageUrl = image,
ContentType = contentType,
FileSource = source
};
files.Add(model);
}
}
return files;
}
catch (Exception ex)
{
_logger.LogWarning($"Error when getting message file screenshots {file} (messageId: {messageId}), Error: {ex.Message}\r\n{ex.InnerException}");
return files;
}
}
#endregion
}