Ejemplo n.º 1
0
        /// <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;
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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;
            }
        }
Ejemplo n.º 4
0
 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());
            }
        }