完善图片上传功能
This commit is contained in:
parent
6014885442
commit
5698acc185
|
@ -1,5 +1,6 @@
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using MasstransferCommon.Model.Constant;
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
using MasstransferCommunicate.Minio;
|
using MasstransferCommunicate.Minio;
|
||||||
using MasstransferCommunicate.Mqtt.Client;
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
using MasstransferExporter.DataExporter.Model;
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
@ -16,6 +17,103 @@ public class ImageService
|
||||||
|
|
||||||
private const string BasePath = "masstransfer";
|
private const string BasePath = "masstransfer";
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 监听图片查询事件
|
||||||
|
/// </summary>
|
||||||
|
public static async Task ListenImageQueryEvent()
|
||||||
|
{
|
||||||
|
await MessageQueueHelper.Subscribe(Topics.UpdateLicenseEvent, HandleImageQueryEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理图片查询请求
|
||||||
|
/// </summary>
|
||||||
|
private static async Task HandleImageQueryEvent(string topic, string payload)
|
||||||
|
{
|
||||||
|
if (payload == null) return;
|
||||||
|
|
||||||
|
var queryDto = JsonUtil.FromJson<ImageQueryDTO>(payload);
|
||||||
|
|
||||||
|
if (queryDto == null) return;
|
||||||
|
|
||||||
|
var batchNumber = queryDto.batchNumber;
|
||||||
|
var bizNumber = queryDto.bizNumber;
|
||||||
|
var imageType = queryDto.imageType;
|
||||||
|
var picType = queryDto.picType;
|
||||||
|
|
||||||
|
var isThumbnail = "thumbnail".Equals(imageType);
|
||||||
|
|
||||||
|
var bucket = isThumbnail ? "thumbnail" : "image";
|
||||||
|
|
||||||
|
var systemParams = GetSystemParams();
|
||||||
|
var imageStoragePath =
|
||||||
|
systemParams!.ImageStoragePath ?? Environment.GetEnvironmentVariable("USERPROFILE");
|
||||||
|
|
||||||
|
var dir = Path.Combine(imageStoragePath, BasePath);
|
||||||
|
|
||||||
|
if (!Directory.Exists(dir)) return;
|
||||||
|
|
||||||
|
var dirInfo = new DirectoryInfo(dir);
|
||||||
|
|
||||||
|
var batchDirs = dirInfo.GetDirectories().Where(d => d.Name.Equals(batchNumber));
|
||||||
|
|
||||||
|
foreach (var batchDir in batchDirs)
|
||||||
|
{
|
||||||
|
var dateDirs = batchDir.GetDirectories();
|
||||||
|
foreach (var dateDir in dateDirs)
|
||||||
|
{
|
||||||
|
var typeDirs = dateDir.GetDirectories();
|
||||||
|
foreach (var typeDir in typeDirs)
|
||||||
|
{
|
||||||
|
if (!typeDir.Name.Equals(picType.ToLower())) continue;
|
||||||
|
var codeDirs = typeDir.GetDirectories();
|
||||||
|
foreach (var codeDir in codeDirs)
|
||||||
|
{
|
||||||
|
if (!codeDir.Name.Equals(bizNumber)) continue;
|
||||||
|
var files = codeDir.GetFiles();
|
||||||
|
foreach (var file in files)
|
||||||
|
{
|
||||||
|
var path = file.FullName;
|
||||||
|
var name = file.Name;
|
||||||
|
if (isThumbnail)
|
||||||
|
{
|
||||||
|
// 先生成缩略图
|
||||||
|
if (file.Name.EndsWith(".bmp") && !file.Name.Contains("_thumbnail"))
|
||||||
|
{
|
||||||
|
// 判断是否已经存在缩略图,如果存在的话,则跳过生成过程
|
||||||
|
name = file.Name.Replace(".bmp", "_thumbnail.bmp");
|
||||||
|
path = file.FullName.Replace(".bmp", "_thumbnail.bmp");
|
||||||
|
if (!File.Exists(path))
|
||||||
|
{
|
||||||
|
GenerateThumbnail(file.FullName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传文件
|
||||||
|
var fileName = $"{Constants.SN}/{codeDir.Name}/{batchDir.Name}/{imageType}/{name}";
|
||||||
|
|
||||||
|
await Minio.UploadFileAsync(bucket, fileName, path);
|
||||||
|
|
||||||
|
var data = new ImageExportData()
|
||||||
|
{
|
||||||
|
BatchNumber = batchDir.Name,
|
||||||
|
BizNumber = codeDir.Name,
|
||||||
|
ImageType = imageType,
|
||||||
|
PicType = isThumbnail ? "thumbnail" : "raw"
|
||||||
|
};
|
||||||
|
|
||||||
|
// 上传完成后发布通知
|
||||||
|
await MessageQueueHelper.Publish(Topics.ImageUpload, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static SystemParams? GetSystemParams()
|
private static SystemParams? GetSystemParams()
|
||||||
{
|
{
|
||||||
return Helper.Query<SystemParams>("select * from system_params limit 1")
|
return Helper.Query<SystemParams>("select * from system_params limit 1")
|
||||||
|
@ -105,24 +203,22 @@ public class ImageService
|
||||||
var imageStoragePath =
|
var imageStoragePath =
|
||||||
systemParams!.ImageStoragePath ?? Environment.GetEnvironmentVariable("USERPROFILE");
|
systemParams!.ImageStoragePath ?? Environment.GetEnvironmentVariable("USERPROFILE");
|
||||||
|
|
||||||
var date = dateTime.ToString("yyyyMMdd");
|
var dir = Path.Combine(imageStoragePath, BasePath);
|
||||||
|
|
||||||
var dir = Path.Combine(imageStoragePath, BasePath, date);
|
|
||||||
|
|
||||||
if (!Directory.Exists(dir)) return;
|
if (!Directory.Exists(dir)) return;
|
||||||
|
|
||||||
var dirInfo = new DirectoryInfo(dir);
|
var dirInfo = new DirectoryInfo(dir);
|
||||||
|
|
||||||
if (isThumbnail)
|
// 文件保存路径的规则是 {user BasePath}/masstransfer/images/{batchCode}/{yyyyMMdd}/wafer/{waferCode}/{timestamp}.bmp
|
||||||
{
|
var files = dirInfo.GetDirectories().Where(d => d.CreationTime.Date == dateTime);
|
||||||
// 对图片进行压缩
|
|
||||||
GenerateThumbnail(dirInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 文件保存路径的规则是 {user BasePath}/masstransfer/images/{yyyyMMdd}/{batchCode}/wafer/{waferCode}/{timestamp}.bmp
|
|
||||||
var files = dirInfo.GetDirectories();
|
|
||||||
foreach (var batchDir in files)
|
foreach (var batchDir in files)
|
||||||
{
|
{
|
||||||
|
if (isThumbnail)
|
||||||
|
{
|
||||||
|
// 对图片进行压缩
|
||||||
|
GenerateThumbnail(batchDir);
|
||||||
|
}
|
||||||
|
|
||||||
var types = batchDir.GetDirectories();
|
var types = batchDir.GetDirectories();
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
namespace MasstransferExporter.ImageExporter.Model;
|
||||||
|
|
||||||
|
public class ImageQueryDTO
|
||||||
|
{
|
||||||
|
public string picType { get; set; }
|
||||||
|
|
||||||
|
public string bizNumber { get; set; }
|
||||||
|
|
||||||
|
public string batchNumber { get; set; }
|
||||||
|
|
||||||
|
public string imageType { get; set; }
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue