/// <summary> /// 订阅消息 /// </summary> /// <param name="kafkaData"></param> public void PullMsg(KafKaContract kafkaData) { LogHelper.logInfo("删除文件:" + kafkaData.Msg); switch (kafkaData.MsgCode) { case KafkaMsgCodeEnum.InsertError: //文件上传失败(文件不删除) break; case KafkaMsgCodeEnum.InsertSuccess: DeleteFile(SerializeHelper.deserializeToObject <UploadContract>(kafkaData.Msg)); break; case KafkaMsgCodeEnum.Update: DeleteFile(SerializeHelper.deserializeToObject <UploadContract>(kafkaData.Msg)); break; case KafkaMsgCodeEnum.InsertListSuccess: var msgList = SerializeHelper.deserializeToObject <List <UploadContract> >(kafkaData.Msg); foreach (var item in msgList) { DeleteFile(item); } break; default: //msgCode错误 break; } }
/// <summary> /// 订阅总署文件上传消息 /// </summary> /// <param name="kafkaData"></param> public void PullUploadMsg(KafKaContract kafkaData) { string KafkaMsgTopic = ConfigHelper.ReadConfigByName("KafkaMsgTopic"); LogHelper.logInfo("插入文件:" + kafkaData.Msg); var result = false; try { switch (kafkaData.MsgCode) { case KafkaMsgCodeEnum.AddList: var insertListData = SerializeHelper.deserializeToObject <List <UploadContract> >(kafkaData.Msg); result = InsertESList(insertListData); break; case KafkaMsgCodeEnum.Add: var insertData = SerializeHelper.deserializeToObject <UploadContract>(kafkaData.Msg); result = InsertES(insertData); break; case KafkaMsgCodeEnum.Update: var updateData = SerializeHelper.deserializeToObject <UploadContract>(kafkaData.Msg); result = UpdateES(updateData); break; default: //msgCode错误 break; } } catch (Exception e) { result = false; } if (result) //入库成功 { if (kafkaData.MsgCode == KafkaMsgCodeEnum.AddList) { kafkaData.MsgCode = KafkaMsgCodeEnum.InsertListSuccess; } else { kafkaData.MsgCode = KafkaMsgCodeEnum.InsertSuccess; } } else //入库失败 { kafkaData.MsgCode = KafkaMsgCodeEnum.InsertError; } KafKaLogic.GetInstance().Push(kafkaData, KafkaMsgTopic); }
/// <summary> /// 推送消息 /// </summary> /// <param name="msg"></param> public void Push(KafKaContract msg, string kafkaTopic) { var config = new ProducerConfig { BootstrapServers = KafkaUrl }; using (var producer = new Producer <Null, string>(config)) { var data = SerializeHelper.serializeToString(msg); var dr = producer.ProduceAsync(kafkaTopic, new Message <Null, string> { Value = data }).Result; } }
public void BigVideo() { try { AliyunOSSHepler oss = new AliyunOSSHepler(); //获取文件所在路径 string workDir = AppDomain.CurrentDomain.BaseDirectory + ConfigHelper.ReadConfigByName("UploadFilePath"); DirectoryInfo folder = new DirectoryInfo(workDir); //回写数据库的上云路径 string osspath = ""; //本地全部上云 FileInfo[] list = folder.GetFiles("*"); LogHelper.logError("获取大文件路径:" + workDir); LogHelper.logError("获取大文件数量:" + list.Length.ToString()); for (int i = 0; i < list.Length; i++) { if (!CommonDictionary.GetInstance().KafkaIsOnline) { continue; } bool returnType = oss.UploadFiles(workDir, list[i].Name, ref osspath); LogHelper.logError("上云路径:" + osspath); if (returnType) { string fileid = list[i].Name.Split(".")[0]; UploadContract contract = new UploadContract(); contract.FileId = Guid.Parse(fileid); contract.IsUpload = true; contract.Url = osspath; contract.NewFileName = list[i].Name; KafKaContract kafka = new KafKaContract(); kafka.MsgId = fileid; kafka.MsgCode = KafkaMsgCodeEnum.Update; kafka.Msg = SerializeHelper.serializeToString(contract); KafKaLogic.GetInstance().Push(kafka, KafkaTopic); } } } catch (Exception e) { LogHelper.logError("上云异常:" + e.Message); } }
public async Task <ResultContract <string> > UploadFile(BaseUploadContract data) { var result = new ResultContract <string>() { Code = 0, Msg = "上传成功" }; try { //验证参数 var orgInfo = new OrganizationContract(); this.CheckParameter(data, ref result, ref orgInfo); if (result.Code == -1) { return(result); } List <UploadContract> fileList = new List <UploadContract>(); var files = Request.Form.Files; var groupId = Guid.NewGuid().ToString(); int order = 1; foreach (var file in files) { var fileModel = new UploadContract() { UserId = data.UserId, OrgId = data.OrgId, AppId = data.AppId, Tags = data.Tags, UploadTime = DateTime.Now, DisplayName = data.DisplayName, Remark = data.Remark, OrgName = orgInfo.OrganizationName, Order = order, ThemeType = data.ThemeType }; //分组id fileModel.GroupId = groupId; var fileData = new MultipartFormDataContent(); //判断文件夹是否存在 if (!Directory.Exists(uploadFilePath)) { Directory.CreateDirectory(uploadFilePath); } var imgPath = AppDomain.CurrentDomain.BaseDirectory + ConfigHelper.ReadConfigByName("ImgsPath"); if (!Directory.Exists(imgPath)) { Directory.CreateDirectory(imgPath); } fileModel.FileName = file.FileName; var lastName = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1, (file.FileName.Length - file.FileName.LastIndexOf(".") - 1)); //扩展名 fileModel.FileId = Guid.NewGuid(); fileModel.NewFileName = fileModel.FileId + "." + lastName; var fileLocalFullName = uploadFilePath + Path.DirectorySeparatorChar + fileModel.NewFileName; var stream = file.OpenReadStream(); //文件保存到本地 double fileSize = 0; //保存文件 FileHelper.SavaFile(fileLocalFullName, stream, ref fileSize); //文件上传成功 修改model fileModel.IsUpload = false; fileModel.Url = fileLocalFullName; fileModel.FileType = lastName; //组织名称。后期加上 //判断文件大小 double uploadLimitSize = 0; double.TryParse(ConfigHelper.ReadConfigByName("UploadLimitSizeM"), out uploadLimitSize); //如果是视频截取封面 if (CommonDictionary.GetInstance().VideoType.Count(d => d.ToLower() == lastName.ToLower()) > 0) { var thumbnailPath = AliyunOSSHepler.GetInstance().GetPicFromVideo(fileLocalFullName, imgPath + Path.DirectorySeparatorChar + fileModel.FileId + ".jpg", "1"); var thumbnailUrl = ""; var isUpload = AliyunOSSHepler.GetInstance().UploadFiles(imgPath, fileModel.FileId + ".jpg", ref thumbnailUrl, true); fileModel.ThumbnailUrl = thumbnailPath; if (isUpload && !string.IsNullOrWhiteSpace(thumbnailUrl)) { fileModel.ThumbnailUrl = thumbnailUrl; } else { fileModel.IsFailure = true; this._uploadHandService.SavaTagsFile(fileModel); //把文件 移动到错误文件 文件夹 System.IO.File.Move(uploadFilePath + Path.DirectorySeparatorChar + fileModel.NewFileName, FailurePath + Path.DirectorySeparatorChar + fileModel.NewFileName); result.Code = -1; result.Msg = "截图失败"; return(result); } } //如果断网把标签和文件都存到本地 if (!CommonDictionary.GetInstance().KafkaIsOnline) { this._uploadHandService.SavaTagsFile(fileModel); } else { //如果文件大小比预设大小 小 直接上云 if (fileSize < uploadLimitSize) { var url = ""; fileModel.IsUpload = AliyunOSSHepler.GetInstance().UploadFiles(uploadFilePath, fileModel.NewFileName, ref url, false); //如果上传失败 标签存本地 if (!fileModel.IsUpload) { fileModel.IsFailure = true; this._uploadHandService.SavaTagsFile(fileModel); //把文件 移动到错误文件 文件夹 System.IO.File.Move(uploadFilePath + Path.DirectorySeparatorChar + fileModel.NewFileName, FailurePath + Path.DirectorySeparatorChar + fileModel.NewFileName); } else { fileModel.Url = url; } } fileList.Add(fileModel); order++; } } ////把标签 推送到总署 KafKaContract kafkaModel = new KafKaContract(); if (fileList.Count > 1) //批量添加 { kafkaModel.MsgCode = KafkaMsgCodeEnum.AddList; kafkaModel.Msg = SerializeHelper.serializeToString(fileList); KafKaLogic.GetInstance().Push(kafkaModel, KafkaTopic); } else if (fileList.Count() == 1) //单个文件添加 { kafkaModel.MsgCode = KafkaMsgCodeEnum.Add; fileList[0].GroupId = Guid.NewGuid().ToString(); kafkaModel.Msg = SerializeHelper.serializeToString(fileList[0]); KafKaLogic.GetInstance().Push(kafkaModel, KafkaTopic); } } catch (Exception e) { LogHelper.logError("上传文件失败:" + e.StackTrace); result.Code = -1; result.Msg = e.Message; } return(result); }
public void FailureVideo() { try { //获取文件所在路径 string workDir = AppDomain.CurrentDomain.BaseDirectory + ConfigHelper.ReadConfigByName("FailurePath"); if (System.IO.Directory.Exists(workDir)) { var list = this._dbContext.FileDB.FindAll <FileDbContract>(); LogHelper.logError("读取失败json"); foreach (var entity in list) { if (!CommonDictionary.GetInstance().KafkaIsOnline) { continue; } if (!string.IsNullOrEmpty(entity.Id)) { LogHelper.logInfo("读取json文件:" + entity.Id); DirectoryInfo folder = new DirectoryInfo(workDir); //回写数据库的上云路径 string osspath = ""; //本地全部上云 FileInfo[] fileList = folder.GetFiles(entity.Id + ".*"); for (int i = 0; i < fileList.Length; i++) { UploadContract contract = SerializeHelper.deserializeToObject <UploadContract>(entity.data); bool imgupload = true; string imgurl = ""; if (contract.IsUpload == true) { KafKaContract kafka = new KafKaContract(); kafka.MsgId = entity.Id; kafka.MsgCode = KafkaMsgCodeEnum.Add; kafka.Msg = SerializeHelper.serializeToString(contract); KafKaLogic.GetInstance().Push(kafka, KafkaTopic); continue; } if (CommonDictionary.GetInstance().VideoType.Count(d => d.ToLower() == contract.FileType.ToLower()) > 0) { imgurl = AliyunOSSHepler.GetInstance().GetPicFromVideo(workDir + fileList[i].Name, imgPath + Path.DirectorySeparatorChar + contract.FileId + ".jpg", "1"); imgupload = AliyunOSSHepler.GetInstance().UploadFiles(imgPath, contract.FileId + ".jpg", ref imgurl); } if (imgupload) { bool returnType = AliyunOSSHepler.GetInstance().UploadFiles(workDir, fileList[i].Name, ref osspath); if (returnType) { LogHelper.logInfo("上云封面地址:" + imgurl + "_______上云视频路径:" + osspath); try { contract.IsUpload = true; contract.Url = osspath; contract.ThumbnailUrl = imgurl; entity.data = SerializeHelper.serializeToString(contract); this._dbContext.FileDB.Save <FileDbContract>(contract.FileId.ToString(), entity); KafKaContract kafka = new KafKaContract(); kafka.MsgId = entity.Id; kafka.MsgCode = KafkaMsgCodeEnum.Add; kafka.Msg = SerializeHelper.serializeToString(contract); KafKaLogic.GetInstance().Push(kafka, KafkaTopic); } catch (Exception e) { LogHelper.logError("解析json数据推送kafka异常:文件名-" + fileList[i].Name + "__" + e.ToString()); } } } } } } } else { LogHelper.logError("失败任务无数据,本次不执行"); } } catch (Exception e) { LogHelper.logError("失败文件推送异常:" + e.Message + "__" + e.ToString()); } }