public ActionResult UploadPkg(int id, HttpPostedFileBase file) { if (file == null) { return(Error("未指定任何文件")); } if (string.IsNullOrEmpty(file.FileName)) { return(Error("更新包名为空")); } // 有的浏览器会将整个文件路径作为文件名 var idx = file.FileName.LastIndexOf(Path.DirectorySeparatorChar); var pkgName = idx >= 0 ? file.FileName.Substring(idx + 1) : file.FileName; if (pkgName.StartsWith("$")) { return(Error("文件名不能以 $ 开头")); } if (pkgName.EndsWith(SysUpdateHelper.InstalledPkgExt)) { return(Error($"文件名不能以 {SysUpdateHelper.InstalledPkgExt} 结尾")); } if (!pkgName.EndsWith(".zip")) { return(Error("文件名必须以 .zip 结尾")); } try { if (!TryLockOp(id)) { return(Error("当前有其他操作未完成,等待完成后再继续")); } DateTime start = DateTime.Now; SysUpdateHelper.SaveUploadPkg(id, pkgName, file.InputStream); var span = DateTime.Now - start; LogHelper.LogInfo($"更新包 system{id}/{pkgName} 上传成功。耗时: {span.Hours}小时{span.Minutes}分钟{span.Seconds}秒"); return(Success()); } catch (Exception ex) { LogHelper.LogError($"更新包 system{id}/{pkgName} 上传失败", ex); return(Error(ex.Message)); } finally { UnLockOp(id); } }