009_DI-Elec/Learun.Application.Web/AppApi/UpdateApiController.cs

189 lines
7.3 KiB
C#
Raw Normal View History

2025-08-13 11:14:39 +08:00
using DocumentFormat.OpenXml.Spreadsheet;
using ICSharpCode.SharpZipLib.Zip;
using Learun.Application.Base.SystemModule;
using Learun.Application.TwoDevelopment.ZZDT_EC;
using Learun.Util;
using Microsoft.Owin;
using NPOI.Util;
using System;
using System.IO;
using System.Web;
using System.Web.Http;
using System.Web.Http.Results;
using static Learun.Application.TwoDevelopment.ZZDT_EC.ec_library_fileBLL;
namespace Learun.Application.Web.AppApi
{
/// <summary>
/// 客户端更新接口,包括下载和上传(管理员)
/// </summary>
[RoutePrefix("api/UpdateApi")]
[HandlerApiLogin(FilterMode.Ignore)]
public class UpdateApiController : WebApiControllerBase
{
/// <summary>
/// 下载自动化平台的更新程序
/// </summary>
/// <param name="MD5"></param>
/// <param name="pkgName">Exe-X64</param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult UpdateFile(string MD5, string pkgName = "Exe-X64")
{
try
{
pkgName += ".zip";
string ServerPath = Config.GetValue("SWSUpdateFile");
if (System.IO.Directory.Exists(ServerPath))
{
string path = Path.Combine(ServerPath, pkgName);
if (FileDownHelper.FileExists(path))
{
var newMD5 = Md5Helper.Encrypt(File.ReadAllBytes(path), 32);
if (MD5 != newMD5)
{
FileDownHelper.DownLoadnew(path);
return Success("正在下载");
}
else
{
return Success("无需更新");
}
}
else
{
return BadRequest($"更新文件{path.Substring(2)}在服务器中不存在");//400的code
}
}
return BadRequest("更新文件夹在服务器中不存在");
}
catch (Exception ex)
{
return Fail("其他错误。" + ex.Message);
}
}
/// <summary>
/// 上传自动化平台的更新程序
/// </summary>
/// <returns></returns>
[HttpPost]
[SwaggerFileLoadAttr]
public IHttpActionResult UploadFile(string adminPwd)
{
string exeName = "SignalManage";
try
{
if (adminPwd != "CADTeam8081")
{
return Fail("adminPwd参数密码不对");
}
else
{
var x = HttpContext.Current.Request.Files;//HttpPostedFile file = HttpContext.Current.Request.Files["file"];//接收
if (x == null || x.Count == 0)
{
return Fail("未选择文件");
}
else
{
var file = x[0];
string fileName = Path.GetFileName(file.FileName);//文件名,带后缀名
if (!fileName.ToLower().EndsWith(".zip"))
{
return Fail("请上传zip格式的更新包。");
}
else
{
Stream s = file.InputStream;//文件流
#region zip
bool foundExe = false;
//一个ZIP文件中的条目可以理解为压缩包里面的一个文件夹/文件
ZipEntry theEntry = null;
//解压缩输出流,从压缩包中一个接一个的读出文档。
using (ZipInputStream inputStream = new ZipInputStream(s))
{
while ((theEntry = inputStream.GetNextEntry()) != null)
{
if (theEntry.IsDirectory)
{
}
else
{
if (theEntry.Name.ToLower() == exeName.ToLower() + ".exe")
{
foundExe = true;
}
}
}
inputStream.Close();
}
if (!foundExe)
{
return Fail($"未在zip中找到{exeName}.exe");
}
#endregion
int fileSize = file.ContentLength;
string ServerPath = Config.GetValue("SWSUpdateFile");
if (!System.IO.File.Exists(ServerPath))
{
Directory.CreateDirectory(ServerPath); //创建文件夹
}
using (var fileStream = File.Create(Path.Combine(ServerPath, fileName)))
{
s.Seek(0, SeekOrigin.Begin);
s.CopyTo(fileStream);
}
}
}
}
return Success("上传成功。");
}
catch (Exception ex)
{
return Fail("上传更新包错误。" + ex.Message);
}
}
/// <summary>
/// 下载插件端更新程序
/// </summary>
/// <param name="MD5">当前程序MD5</param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult UpdateCAD(string MD5)
{
var folder = "StartCAD.zip";
try
{
string ServerPath = Config.GetValue("SWSUpdateFile");
if (System.IO.Directory.Exists(ServerPath))
{
string path = Path.Combine(ServerPath, folder);
if (FileDownHelper.FileExists(path))
{
var newMD5 = Md5Helper.Encrypt(File.ReadAllBytes(path), 32);
if (MD5 != newMD5)
{
FileDownHelper.DownLoadnew(path);
return Success("正在下载");
}
else
{
return Success("无需更新");
}
}
else
{
return BadRequest($"更新文件{path.Substring(2)}在服务器中不存在");//400的code
}
}
return BadRequest($"更新文件夹在服务器中不存在");
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}