You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
5.4 KiB
C#

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;
}
}
}