AutoUpdateNET/AutoUpdate/AutoUpdateServer/Controllers/自动更新Controller.cs
2025-02-12 17:00:49 +08:00

134 lines
3.2 KiB
C#

using System.ComponentModel;
using System.IO.Compression;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Lmes服务端.Controllers
{
// 版本信息模型
public class VersionInfo
{
public string Version { get; set; }
public string CRC { get; set; }
public string FileName { get; set; }
}
[EnableCors("AllowAll")]
[Route("api/[controller]")]
[ApiController]
public class Controller : ControllerBase
{
private string { get; set; }
public Controller()
{
// 设置版本文件存储路径
= Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Lmes_1.0",
"VersionInfo"
);
// 确保目录存在
if (!Directory.Exists())
{
Directory.CreateDirectory();
}
}
// 获取最新版本信息
[HttpGet("获取最新版本信息")]
public ActionResult<VersionInfo> GetLatestVersion()
{
try
{
var files = Directory.GetFiles(, "*.zip");
if (!files.Any())
{
return NotFound("未找到任何版本文件");
}
// 获取最新的版本文件
var latestFile = files.OrderByDescending(f => f).First();
var fileName = Path.GetFileNameWithoutExtension(latestFile);
// 计算文件的CRC值
string crc;
using (var fs = System.IO.File.OpenRead(latestFile))
{
using var sha = System.Security.Cryptography.SHA256.Create();
var hash = sha.ComputeHash(fs);
crc = BitConverter.ToString(hash).Replace("-", "");
}
return new VersionInfo
{
Version = fileName.Split("--")[0],
CRC = crc,
FileName = Path.GetFileName(latestFile)
};
}
catch (Exception ex)
{
return StatusCode(500, $"获取版本信息失败: {ex.Message}");
}
}
// 上传新版本
[HttpPost("上传新版本")]
public async Task<IActionResult> UploadVersion(IFormFile file)
{
try
{
var fileName = file.FileName;
var filePath = Path.Combine(, fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
// 验证上传的文件是否为有效的ZIP文件
try
{
using (var archive = ZipFile.OpenRead(filePath))
{
// 检查是否包含必要的文件
if (!archive.Entries.Any(e => e.Name.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)))
{
System.IO.File.Delete(filePath);
return BadRequest("ZIP文件中未找到可执行文件");
}
}
}
catch
{
System.IO.File.Delete(filePath);
return BadRequest("上传的文件不是有效的ZIP文件");
}
return Ok("文件上传成功");
}
catch (Exception ex)
{
return StatusCode(500, $"文件上传失败: {ex.Message}");
}
}
// 下载指定版本
[HttpGet("下载指定版本/{fileName}")]
public IActionResult DownloadVersion(string fileName)
{
var filePath = Path.Combine(, fileName);
if (!System.IO.File.Exists(filePath))
{
return NotFound("指定的版本文件不存在");
}
var fileStream = System.IO.File.OpenRead(filePath);
return File(fileStream, "application/zip", fileName);
}
}
}