public override string FileName(TaskEntity taskEntity) { if (!string.IsNullOrEmpty(fileName)) { return(fileName); } if (taskEntity.FileInfo == null || string.IsNullOrEmpty(taskEntity.FileInfo.NormalFilePath)) { throw new ArgumentNullException("生成压缩文件时,一般文件地址为空,无法生成压缩文件"); } if (!File.Exists(taskEntity.FileInfo.NormalFilePath)) { throw new Exception(string.Format("生成压缩文件时,一般文件[{0}]指定路径下不存在,无法生成压缩文件", taskEntity.FileInfo.NormalFilePath)); } string compressPath = FileHelper.GetDirectoryName(taskEntity.FileInfo.NormalFilePath); string compressFileName = FileHelper.GetFileName(taskEntity.FileInfo.NormalFilePath); string compressFileNameWithoutExt = FileHelper.GetFileNameWithoutExtension(taskEntity.FileInfo.NormalFilePath); if (!normalFileValidateReg.IsMatch(compressFileName)) { throw new Exception(string.Format("生成压缩文件时,一般文件名[{0}]格式不符合要求", compressFileName)); } string encryptKey = Common.GetEncryptKey(); if (string.IsNullOrEmpty(encryptKey)) { throw new Exception("生成压缩文件时,配置中未读取密钥串"); } string fileMd5 = MD5Utils.GetMD5HashFromFile(taskEntity.FileInfo.NormalFilePath); string fileAndKeyMd5 = MD5Utils.GetMD5(fileMd5 + encryptKey); //文件校验位 按照规则前三个字符和后三个字符拼接组成6个字符作为校验码 string fileDataCode = fileAndKeyMd5.PreNChar(3) + fileAndKeyMd5.AfterNChar(3); if (string.IsNullOrEmpty(fileDataCode) || fileDataCode.Length != 6) { throw new Exception("生成压缩文件时,计算文件校验位时出现异常"); } compressFileNameWithoutExt += "_" + fileDataCode; string fileNameMd5 = MD5Utils.GetMD5(compressFileNameWithoutExt + "_" + encryptKey); //生成文件校验位 按照规则取后2个字符和前4个字符拼接成6个字符为校验位 string fileNameCode = fileNameMd5.AfterNChar(2) + fileNameMd5.PreNChar(4); if (string.IsNullOrEmpty(fileNameCode) || fileNameCode.Length != 6) { throw new Exception("生成压缩文件时,计算文件名校验位时出现异常"); } fileName = compressFileNameWithoutExt + "_" + fileNameCode + ".jl" + ".zip"; return(fileName); }