feat minlo初步搭建

This commit is contained in:
cheche
2024-01-25 12:23:33 +08:00
parent a36ff46722
commit 4f5a2c1c2e
8 changed files with 184 additions and 54 deletions

View File

@@ -2,17 +2,18 @@
using Dlhis.Common.Response;
using Dlhis.Common.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Common.Controllers;
/// <summary>
/// 文件上传/下载
/// </summary>
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ApkFIileController : ControllerBase
/// <summary>
/// 文件上传/下载
/// </summary>
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ApkFIileController : ControllerBase
{
private IApkFIileService _apkFIileService;
@@ -26,10 +27,24 @@ namespace Dlhis.Common.Controllers;
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public async Task FormSingleFileUpload(ApkRequest request)
public async Task FormSingleFileUpload([FromForm] ApkRequest request)
{
await _apkFIileService.FormSingleFileUpload(request);
await _apkFIileService.FormSingleFileUpload(request);
}
/// <summary>
/// 文件下载
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
[HttpGet("url")]
public async Task<string> RequestDownloadFile()
{
return await _apkFIileService.RequestDownloadFile();
}
}

View File

@@ -1,5 +1,6 @@
using Kurisu.AspNetCore.Startup;
using Kurisu.SqlSugar.Extensions;
using Microsoft.Extensions.DependencyInjection;
using Minio;
namespace Dlhis.Common.Packs
@@ -11,10 +12,9 @@ namespace Dlhis.Common.Packs
public override void ConfigureServices(IServiceCollection services)
{
//注入minioClient
var minioClient = (MinioClient)new MinioClient()
.WithEndpoint(Configuration["MinIO:Endpoint"])
.WithCredentials(Configuration["MinIO:AccessKey"], Configuration["MinIO:SecretKey"])
.WithSSL()
IMinioClient minioClient = (MinioClient)new MinioClient()
.WithEndpoint("192.168.199.124:9000")
.WithCredentials("Zbjj05OFtR19e5TJopQU", "UMXtNdZhufhAAyYJ3XND4cEgZNUsgOWtbUzksizK")
.Build();
services.AddSingleton(minioClient);
}

View File

@@ -11,6 +11,12 @@ namespace Dlhis.Common.Services;
/// <param name="request"></param>
/// <returns></returns>
Task FormSingleFileUpload(ApkRequest request);
/// <summary>
/// 文件下载
/// </summary>
/// <returns></returns>
Task<string> RequestDownloadFile();
}

View File

@@ -0,0 +1,11 @@
using Dlhis.Common.Request;
namespace Dlhis.Common.Services
{
public interface IMinioService : IScopeDependency
{
Task MinloUploadFileAsync(ApkRequest request);
Task<string> MinloDownloadLinkAsync();
Task MinloRemoveFileAsync(ApkRequest request);
}
}

View File

@@ -10,22 +10,23 @@ using Minio.DataModel.Args;
using Minio.Exceptions;
using System.Xml.Linq;
using System;
using Google.Protobuf.WellKnownTypes;
using Minio.DataModel.Encryption;
using MySqlX.XDevAPI;
using Microsoft.AspNetCore.Http;
using System.IO;
namespace Dlhis.Common.Services.Implements;
public class ApkFIileService : IApkFIileService
{
private readonly IMinioService _minioService;
private readonly IDbContext _dbContext;
private readonly MinioClient _client;
public ApkFIileService(IDbContext dbContext, MinioClient client)
public ApkFIileService( IMinioService minioService)
{
_dbContext = dbContext;
_client = client;
_minioService = minioService;
}
/// <summary>
/// 文件上传
/// </summary>
@@ -33,33 +34,16 @@ public class ApkFIileService : IApkFIileService
/// <returns></returns>
public async Task FormSingleFileUpload(ApkRequest request)
{
//上传文件返回地址
var url = "https://raw.githubusercontent.com/feicien/android-auto-update/develop/extras/android-auto-update-v1.3.apk";
var apkInfo = new ApkFIileEntity
{
Url = url,
VersionCode = request.VersionCode,
UpdateMessage = request.UpdateMessage,
};
await _dbContext.InsertAsync(apkInfo);
await _minioService.MinloUploadFileAsync(request);
}
public async Task UploadFile(IFormFile formFile,string bucketName = "test")
/// <summary>
/// 文件下载
/// </summary>
/// <returns></returns>
public async Task<string> RequestDownloadFile()
{
}
//文件下载
[HttpGet]
public IActionResult RequestDownloadFile(string filename)
{
var FilePath =" ";
return new FileStreamResult(new FileStream(FilePath, FileMode.Open), "application/octet-stream") { FileDownloadName = filename };
return await _minioService.MinloDownloadLinkAsync();
}
}

View File

@@ -0,0 +1,107 @@
using Dlhis.Common.Request;
using Dlhis.Entity.Common;
using Google.Protobuf.WellKnownTypes;
using Kurisu.SqlSugar.Services;
using Minio;
using Minio.DataModel.Args;
using Minio.Exceptions;
using Npgsql.Replication.PgOutput.Messages;
using System.IO;
namespace Dlhis.Common.Services.Implements
{
public class MinioService : IMinioService
{
private readonly IDbContext _dbContext;
private readonly IMinioClient _client;
private static string bucketName = "apk";
public MinioService(IDbContext dbContext, IMinioClient client)
{
_dbContext = dbContext;
_client = client;
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task MinloUploadFileAsync(ApkRequest request)
{
using (MemoryStream filestream = new MemoryStream())
{
await request.formFile.CopyToAsync(filestream);
filestream.Position = 0;
string fileName = request.formFile.FileName;
var res = await _client.PutObjectAsync(new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(fileName)
.WithStreamData(filestream)
.WithObjectSize(filestream.Length));
//"\"698d51a19d8a121ce581499d7b701668\""
//更新数据库
var entity = await _dbContext.Queryable<ApkFileEntity>().Where(x => x.Name == fileName).FirstAsync();
if (entity == null)
{
var info = new ApkFileEntity
{
Name = fileName,
Url = fileName,
VersionCode = request.VersionCode,
UpdateMessage = request.UpdateMessage,
};
await _dbContext.InsertAsync(info);
}
else
{
entity.Url = fileName;
entity.VersionCode = request.VersionCode;
entity.UpdateMessage = request.UpdateMessage;
}
}
}
/// <summary>
/// 文件下载链接
/// </summary>
/// <returns></returns>
public async Task<string> MinloDownloadLinkAsync()
{
try
{
var url = await _client.PresignedGetObjectAsync(new PresignedGetObjectArgs()
.WithBucket(bucketName)
.WithObject("消费API逻辑.txt")
.WithExpiry(60 * 60 * 24));//链接时效
return url;
}
catch (MinioException e)
{
Console.Out.WriteLine("Error occurred: " + e);
return null;
}
}
/// <summary>
/// 单个删除文件
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task MinloRemoveFileAsync(ApkRequest request)
{
string fileName = request.formFile.FileName;
await _client.RemoveObjectAsync(new RemoveObjectArgs()
.WithBucket(bucketName)
.WithObject(fileName));
}
}
}

View File

@@ -31,12 +31,12 @@
//minIO配置
"MinIO": {
//服务器IP
"Endpoint": "http://192.168.199.124:9001",
"Endpoint": "http://192.168.199.124:9000",
//账号
"AccessKey": "Zbjj05OFtR19e5TJopQU",
//密码
"SecretKey": "UMXtNdZhufhAAyYJ3XND4cEgZNUsgOWtbUzksizK",
//默认存储桶
"Bucket": "tests"
"Bucket": "apk"
}
}

View File

@@ -6,14 +6,20 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dlhis.Entity.Common
namespace Dlhis.Entity.Common;
/// <summary>
/// Apk文件表
/// </summary>
[SugarTable(TableName = "ApkFIile", TableDescription = "Apk文件表")]
public class ApkFileEntity : SugarBaseEntity
{
/// <summary>
/// Apk文件表
/// </summary>
[SugarTable(TableName = "ApkFIile", TableDescription = "Apk文件表")]
public class ApkFIileEntity : SugarBaseEntity
{
/// <summary>
/// 文件名称
/// </summary>
[SugarColumn(ColumnDescription = "文件名称")]
public string Name { get; set; }
/// <summary>
/// 地址
/// </summary>
@@ -32,4 +38,5 @@ namespace Dlhis.Entity.Common
[SugarColumn(ColumnDescription = "修改信息")]
public string UpdateMessage { get; set; }
}
}