179 lines
5.5 KiB
C#
179 lines
5.5 KiB
C#
using Dlhis.Common.FileOperation.Services;
|
|
using Dlhis.Common.Request;
|
|
using Dlhis.Common.Response;
|
|
using Dlhis.Entity.Common;
|
|
using Kurisu.AspNetCore.Utils.Extensions;
|
|
using Kurisu.SqlSugar.Services;
|
|
using Mapster;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace Dlhis.Common.Services.Implements;
|
|
|
|
public class ApkFIileService : IApkFIileService
|
|
{
|
|
private readonly IMinioService _minioService;
|
|
private readonly IDbContext _dbContext;
|
|
|
|
public ApkFIileService(IMinioService minioService, IDbContext dbContext)
|
|
{
|
|
_minioService = minioService;
|
|
_dbContext = dbContext;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 文件上传
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
public async Task<ApkFileResponse> FormSingleFileUpload(ApkRequest request)
|
|
{
|
|
//上传
|
|
var fileUrl = await _minioService.MinloUploadFileAsync(request);
|
|
|
|
string fileName = request.formFile.FileName;
|
|
|
|
//更新数据库
|
|
var entity = await _dbContext.Queryable<ApkFileEntity>().Where(x => x.Name == fileName).FirstAsync();
|
|
if (entity == null)
|
|
{
|
|
var info = new ApkFileEntity
|
|
{
|
|
Name = fileName,
|
|
Url = fileUrl,
|
|
VersionCode = request.VersionCode,
|
|
UpdateMessage = request.UpdateMessage,
|
|
};
|
|
await _dbContext.InsertAsync(info);
|
|
}
|
|
else
|
|
{
|
|
entity.Url = fileUrl;
|
|
entity.VersionCode = request.VersionCode;
|
|
entity.UpdateMessage = request.UpdateMessage;
|
|
await _dbContext.UpdateAsync(entity);
|
|
}
|
|
var newEntity = await _dbContext.Queryable<ApkFileEntity>().Where(x => x.Name == fileName).FirstAsync();
|
|
var res = newEntity.Adapt<ApkFileResponse>();
|
|
return res;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 文件下载
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<string> RequestDownloadFile(string fileName)
|
|
{
|
|
return await _minioService.MinloDownloadLinkAsync(fileName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 本地文件上传
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
public async Task<ApkFileFormLocalResponse> FormLocalFileUpload(ApkRequest request)
|
|
{
|
|
//上传
|
|
var completeFilePath = FormSingleFileUpload(request.formFile);
|
|
if (completeFilePath == "No file uploaded" || completeFilePath.IsEmpty())
|
|
{
|
|
return null;
|
|
}
|
|
//更新数据库
|
|
var fileName = request.formFile.FileName;
|
|
var entity = await _dbContext.Queryable<ApkFileEntity>().Where(x => x.Name == fileName).FirstAsync();
|
|
if (entity == null)
|
|
{
|
|
var info = new ApkFileEntity
|
|
{
|
|
Name = fileName,
|
|
Url = completeFilePath,
|
|
VersionCode = request.VersionCode,
|
|
VersionName = request.VersionName,
|
|
UpdateMessage = request.UpdateMessage,
|
|
};
|
|
await _dbContext.InsertAsync(info);
|
|
}
|
|
else
|
|
{
|
|
entity.Url = completeFilePath;
|
|
entity.VersionCode = request.VersionCode;
|
|
entity.VersionName = request.VersionName;
|
|
entity.UpdateMessage = request.UpdateMessage;
|
|
await _dbContext.UpdateAsync(entity);
|
|
}
|
|
var newEntity = await _dbContext.Queryable<ApkFileEntity>().Where(x => x.Name == fileName).FirstAsync();
|
|
var res = newEntity.Adapt<ApkFileFormLocalResponse>();
|
|
return res;
|
|
|
|
}
|
|
public string FormSingleFileUpload(IFormFile formFile)
|
|
{
|
|
try
|
|
{
|
|
var filePath = "D:\\apk\\";
|
|
|
|
// 创建存储文件夹
|
|
if (!Directory.Exists(filePath))
|
|
{
|
|
Directory.CreateDirectory(filePath);
|
|
}
|
|
|
|
if (formFile != null && formFile.Length > 0)
|
|
{
|
|
// 保存的文件名称
|
|
var saveName = Path.GetFileName(formFile.FileName);
|
|
|
|
// 文件保存
|
|
using (var fs = File.Create(Path.Combine(filePath, saveName)))
|
|
{
|
|
formFile.CopyTo(fs);
|
|
fs.Flush();
|
|
}
|
|
|
|
// 完整的文件路径
|
|
var completeFilePath = Path.Combine(filePath, saveName);
|
|
return completeFilePath;
|
|
}
|
|
else
|
|
{
|
|
return "No file uploaded";
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return null;
|
|
throw;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 返回最新版本信息
|
|
/// </summary>
|
|
/// <param name="fileName"></param>
|
|
/// <returns></returns>
|
|
public async Task<ApkFileFormLocalResponse> LatestFile(string fileName)
|
|
{
|
|
var info = await _dbContext.Queryable<ApkFileEntity>()
|
|
.Where(x => x.Name == fileName)
|
|
.OrderByDescending(x => x.VersionCode)
|
|
.FirstAsync();
|
|
info.ThrowIfNull($"没有{fileName}信息");
|
|
var res = info.Adapt<ApkFileFormLocalResponse>();
|
|
return res;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 本地下载
|
|
/// </summary>
|
|
/// <param name="fileName"></param>
|
|
/// <returns></returns>
|
|
public IActionResult FormLocalDownloadFile(string fileName)
|
|
{
|
|
var filePath = "D:\\apk\\";
|
|
string path = filePath + fileName;
|
|
return new FileStreamResult(new FileStream(path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
|
|
}
|
|
}
|
|
|
|
|