Beispiel #1
0
        static async Task Main(string[] args)
        {
            Console.Title = "WEB发布工具";

            string configPath = System.Environment.CurrentDirectory + @"\config.json";
            Config config     = null;

            if (!File.Exists(configPath))
            {
                Console.WriteLine("缺少配置文件config.json");
                goto lbWhile;
            }
            string strConfig = File.ReadAllText(configPath);

            config = JsonConvert.DeserializeObject <Config>(strConfig);
            if (config == null)
            {
                Console.WriteLine("缺少配置");
                goto lbWhile;
            }

            Console.WriteLine("欢迎使用WEB程序发布工具,致力于一键发布WEB程序");
            Console.WriteLine("----------------------------------------------------");
            Console.WriteLine("执行配置的CMD命令: run cmd");
            Console.WriteLine("打包Web文件: batch");
            Console.WriteLine("退出: exit");
            Console.WriteLine("----------------------------------------------------");

lbWhile:
            while (true)
            {
                string cmd = Console.ReadLine().ToLower();
                if (cmd == "batch")
                {
                    Console.WriteLine("请输入您版本文件存放地,值为native或remote,native为项目目录下,remote将通过Ftp远程获取");
                    string versionFileStore = "";
                    while (true)
                    {
                        versionFileStore = Console.ReadLine().ToLower();
                        if (versionFileStore == "native" || versionFileStore == "remote")
                        {
                            break;
                        }
                        Console.WriteLine("文件存放地不合法,请输入native或remote");
                    }

                    Console.WriteLine("请输入您需要输出的类型,值为zip或ftp,zip为打包成zip压缩文件,ftp将自动上传至您配置的ftp目录");
                    string outType = "";
                    while (true)
                    {
                        outType = Console.ReadLine().ToLower();
                        if (outType == "zip" || outType == "ftp")
                        {
                            break;
                        }
                        Console.WriteLine("输出类型不合法,请输入zip或者ftp");
                    }

                    Console.WriteLine("您需要执行配置的CMD命令吗?yes or no");
                    string isRunCmd = Console.ReadLine().ToLower();
                    if (isRunCmd == "yes")
                    {
                        BatchFrontFile(config.Projects);
                    }

                    PrintPrompt("开始文件版本比对,请稍后....");
                    string currentOutDir = config.OutDir + $@"\{DateTime.Now.ToString("yyyyMMdd")}";
                    int    i             = 1;
                    while (Directory.Exists(currentOutDir))
                    {
                        if (i > 1)
                        {
                            currentOutDir = currentOutDir.Substring(0, currentOutDir.LastIndexOf('-'));
                        }
                        currentOutDir += "-" + i;
                        i++;
                    }
                    foreach (var item in config.Projects)
                    {
                        if (item.ProjectFtpConfig == null)
                        {
                            item.ProjectFtpConfig = config.PublicFtpConfig;
                        }
                        FileManage fileManage = new FileManage(item, versionFileStore);
                        fileManage.IgnoreDir        = config.IgnoreDir;
                        fileManage.IgnoreFileName   = config.IgnoreFileName;
                        fileManage.IgnoreFileSuffix = config.IgnoreFileSuffix;
                        string projectOutDir = currentOutDir + $@"\{item.ProjectName}";
                        fileManage.OutUpdateFile(item.ReleasePath, projectOutDir);
                        fileManage.SaveVersionFile(projectOutDir);
                    }
                    PrintPrompt("文件版本比对完毕");

                    if (outType == "zip" && Directory.Exists(currentOutDir))
                    {
                        PrintPrompt("开始压缩文件,请稍后....");
                        string zipName = string.Empty;
                        if (i == 1)
                        {
                            zipName = $"Web更新包{DateTime.Now.ToString("yyyyMMdd")}.zip";
                        }
                        else
                        {
                            zipName = $"Web更新包{DateTime.Now.ToString("yyyyMMdd")}-{i - 1}.zip";
                        }
                        ZipFile.CreateFromDirectory(currentOutDir, config.OutDir + "\\" + zipName);
                        PrintPrompt("开始压缩文件完毕,恭喜您,打包已全部完成");
                    }
                    else
                    {
                        PrintPrompt("开始通过FTP上传文件,请稍后....");
                        DateTime statDT = DateTime.Now;
                        foreach (var item in config.Projects)
                        {
                            string projectOutDir = currentOutDir + $@"\{item.ProjectName}";
                            if (!Directory.Exists(projectOutDir))
                            {
                                continue;
                            }
                            List <string> allFile   = FileManage.GetAllFile(projectOutDir);
                            FtpConfig     ftpConfig = config.PublicFtpConfig;
                            if (item.ProjectFtpConfig != null)
                            {
                                ftpConfig = item.ProjectFtpConfig;
                            }
                            DirUploadState dirUploadState = new DirUploadState();
                            dirUploadState.FileCount = allFile.Count();
                            dirUploadState.FileIndex = 1;
                            using (var ftp = new FtpClient(ftpConfig.Host, ftpConfig.Port, ftpConfig.User, ftpConfig.Pass))
                            {
                                ftp.Connect();
                                Action <FtpProgress> progress = delegate(FtpProgress p)
                                {
                                    if (p.Progress == 1)
                                    {
                                    }
                                    else
                                    {
                                        Console.WriteLine($"正在更新项目“{item.ProjectName}”,总共{dirUploadState.FileCount}个文件,正在上传第{dirUploadState.FileIndex + 1}个文件, {p.LocalPath}:{ (p.Progress).ToString("#0") }%");
                                    }
                                };
                                FileManage.UploadToFtp(ftp, projectOutDir, item.FtpDir, projectOutDir, progress, dirUploadState);
                            }
                        }
                        PrintPrompt($"上传文件完成,FTP耗时{ (int)((DateTime.Now - statDT).TotalSeconds)}秒");
                    }
                    PrintPrompt("batch 执行完毕");
                }
                else if (cmd == "help")
                {
                    Console.WriteLine("run cmd         执行配置的CMD命令");
                    Console.WriteLine("batch           输出需要更新的文件");
                    Console.WriteLine("exit            退出");
                }
                else if (cmd == "exit")
                {
                    break;
                }
                else
                {
                    Console.WriteLine($"'{cmd}'无效命名 输入help查看命令");
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// 上传文件至Ftp
 /// </summary>
 public static void UploadToFtp(FtpClient ftp, string fileDir, string romoteDir, string prefixDir, Action <FtpProgress> progress, DirUploadState dirUploadState)
 {
     string[] file = Directory.GetFiles(fileDir);
     foreach (var item in file)
     {
         ftp.UploadFile(item, romoteDir + "/" + ConvertToFtpDir(fileDir, prefixDir) + "/" + Path.GetFileName(item), FtpRemoteExists.Overwrite, true, FtpVerify.None, progress);
         dirUploadState.FileIndex++;
     }
     string[] dir = Directory.GetDirectories(fileDir);
     for (int i = 0; i < dir.Length; i++)
     {
         UploadToFtp(ftp, dir[i], romoteDir, prefixDir, progress, dirUploadState);
     }
 }