Ejemplo n.º 1
0
        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);
            }
        }