using IBKLinker_Minio.Entity ;
using log4net ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Reflection ;
using System.Text ;
using System.Threading.Tasks ;
using System.Web.Http ;
using Minio ;
using System.Net.PeerToPeer ;
using System.IO ;
using System.Reactive.Linq ;
using Minio.DataModel ;
using System.Security.AccessControl ;
using System.IO.Pipes ;
using System.Net.Mime ;
using IBKLinker_Minio.Entity.MinioController ;
using SOA.Objects ;
using SOA.Persistent ;
using System.Web.Http.Results ;
using System.Runtime.InteropServices.ComTypes ;
using System.Xml ;
using Swashbuckle.Swagger ;
using System.Runtime.ConstrainedExecution ;
using System.Net.Http ;
using System.Web.UI.WebControls ;
using System.Runtime.Remoting.Contexts ;
using System.Runtime.InteropServices ;
using System.Net ;
using NPOI.XSSF.UserModel ;
using NPOI.SS.UserModel ;
using System.Net.Http.Headers ;
using NPOI.SS.Formula.Functions ;
using System.Xml.Linq ;
using NPOI.HPSF ;
namespace IBKLinker_Minio.Common
{
/// <summary>
/// 作者:孙亮
/// 编写时间: 2023-10-13
/// 编写内容: minio业务逻辑
/// </summary>
public class MinioBusinessLogic
{
private static readonly ILog logger = LogManager . GetLogger ( MethodBase . GetCurrentMethod ( ) . DeclaringType ) ;
/// <summary>
/// 异步处理取minio文件流数据方法
/// </summary>
public async Task < string > Download ( string bucketName , string path )
{
MemoryStream memoryStream = new MemoryStream ( ) ;
try
{
var minio = new MinioClient ( "172.15.88.212:9000" , "minioadmin" , "minioadmin" ) ; //验证连接minio数据库
bucketName = "dayetegang" ; //桶名
await minio . GetObjectAsync ( bucketName , path , ( stream ) = >
{
stream . CopyTo ( memoryStream ) ; //将文件去除复制到memoryStream
} ) ;
memoryStream . Position = 0 ; //清除
string base64String = Convert . ToBase64String ( memoryStream . ToArray ( ) ) ; //转换base64
return base64String ; //返回值
}
catch ( Exception ex )
{
logger . InfoFormat ( ex . ToString ( ) ) ;
throw ;
}
}
/// <summary>
/// 文件上传操作日志记录
/// </summary>
public void MinioOperationLog ( string OperateUser , string FileName , string Operate , string FilePk , string FileUPk , IDbContext db ) //传参为操作人、文件名、操作、数据库连接上下文对象
{
MinioOperationlog MOdata = new MinioOperationlog ( ) ;
DateTime time = DateTime . Now ; //时间
MOdata . Pk = Convert . ToInt32 ( db . QueryScalar ( "select S_MINIO_OPERATIONLOG.nextval from dual" ) ) ; ///拿到表自增长的值赋值给自增长主键pk;
MOdata . OperateUser = OperateUser ; //操作者
MOdata . OperateTime = time ; //操作时间
MOdata . FilePk = FilePk . ToString ( ) ; //文件pk
MOdata . FileUPk = FileUPk . ToString ( ) ; //文件父级pk
MOdata . FileName = FileName ; //文件名
MOdata . Operater = OperateUser + Operate + FileName ; //操作(操作人,加操作,加文件名称)
MOdata . CreationTime = time ; //创建时间
db . Insert < MinioOperationlog > ( MOdata ) ; //写入数据库
}
/// <summary>
/// 文件夹递归查询
/// </summary>
public List < StoragePath > GetSubDirectories ( int parentPk )
{
List < StoragePath > subDirs = new List < StoragePath > ( ) ;
using ( IDbContext db = ObjectContainer . GetObject < IDbContext > ( "db" ) )
{
List < MinioStoragePath > subDirectories = db . Query < MinioStoragePath > ( "select * from MINIO_STORAGE_PATH where UPK ='" + parentPk + "' and CLEAR_FLAG='0' and FILE_TYPE='0' ORDER BY PK" ) . ToList ( ) ; //查询子级中是否还有子级
foreach ( var subDir in subDirectories )
{
RequstStoragePath subDirModel = new RequstStoragePath ( ) ;
subDirModel . Pk = subDir . Pk ; //主键ID
subDirModel . Upk = subDir . Upk ; //父级文件夹pk
subDirModel . FileName = subDir . FileName ; //文件名称
subDirModel . FilePath = subDir . FilePath ; //文件路径
subDirModel . FileType = subDir . FileType ; //文件类型
subDirModel . FileLevel = subDir . FileLevel ; //层级
subDirModel . CreatorTime = subDir . CreatorTime ; //创建时间
subDirModel . CreatorUser = subDir . CreatorUser ; //创建者
subDirModel . DownloadNum = subDir . DownloadNum ; //下载次数
subDirModel . ModifyUsers = subDir . ModifyUsers ; //修改用户
subDirModel . ModifyTime = subDir . ModifyTime ; //修改时间
subDirModel . ClearUsers = subDir . ClearUsers ; //删除用户
subDirModel . ClearTime = subDir . ClearTime ; //删除时间
subDirModel . ClearFlag = subDir . ClearFlag ; //删除标记 0未删除 1删除
subDirModel . DocumentType = subDir . DocumentType ; //文件种类: 1、技术协议 2、质量要点 3、工艺卡 4、其他
subDirModel . requstStoragePaths = GetSubDirectories ( subDir . Pk ) ; // 递归调用获取子文件夹
subDirs . Add ( subDirModel ) ;
}
}
return subDirs ;
}
}
}