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

189 lines
7.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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