예제 #1
0
        public async Task <ResultContract <byte[]> > GetBreakpoint(string name, long startPos, long endPos)
        {
            var result = new ResultContract <byte[]>()
            {
                Code = 0, Msg = "获取成功"
            };

            //先获取文件大小
            try
            {
                var    newName    = Guid.NewGuid() + "-" + name;
                long   fileLength = AliyunOSSHepler.GetInstance().GetFileLength(name);
                string mimeType   = MimeHelper.GetMimeMapping(name);
                AliyunOSSHepler.GetInstance().Download(downloadPath, startPos, endPos, name, newName);
                var file = new byte[endPos - startPos];
                using (var fileStream = new FileStream(downloadPath + newName, FileMode.Open))
                {
                    fileStream.Read(file, 0, file.Length);
                }

                System.IO.File.Delete(downloadPath + newName);

                result.Data = file;
            }
            catch (Exception e)
            {
                result.Msg  = "获取失败";
                result.Code = -1;
            }

            return(result);
        }
예제 #2
0
        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="fileId"></param>
        /// <returns></returns>
        public ResultContract <string> DeleteFile(string fileId)
        {
            var result = new ResultContract <string>()
            {
                Code = 0, Msg = "删除成功"
            };

            try
            {
                //先删除本地数据库
                var url  = ESAddress + "/document/delete/" + fileId;
                var data = HttpHelper.HttpDelete(url);
                ResultContract <object> returnResource = JsonConvert.DeserializeObject <ResultContract <object> >(data);
                if (returnResource.Code == 200)
                {
                    //删除云端
                    AliyunOSSHepler.GetInstance().DeleteObject(fileId);
                }
                else
                {
                    result.Code = -1;
                    result.Msg  = returnResource.Msg;
                }
            }
            catch (Exception e)
            {
                LogHelper.logError("删除文件失败!" + e.StackTrace);
                result.Code = -1;
                result.Msg  = "删除失败";
                result.Data = e.StackTrace;
            }


            return(result);
        }
예제 #3
0
        public async Task <IActionResult> BreakpointDownload(string name)
        {
            //先获取文件大小
            var    newName    = Guid.NewGuid() + "-" + name;
            long   fileLength = AliyunOSSHepler.GetInstance().GetFileLength(name);
            string mimeType   = MimeHelper.GetMimeMapping(name);
            int    partSize   = 1024 * 1024 * 10;
            var    partCount  = AliyunOSSHepler.GetInstance().CalPartCount(fileLength, partSize);

            for (var i = 0; i < partCount; i++)
            {
                var startPos = partSize * i;
                var endPos   = partSize * i + (partSize < (fileLength - startPos) ? partSize : (fileLength - startPos)) - 1;
                AliyunOSSHepler.GetInstance().Download(downloadPath, startPos, endPos, name, newName);
            }
            var file = new byte[fileLength];

            using (var fileStream = new FileStream(downloadPath + newName, FileMode.Open))
            {
                fileStream.Read(file, 0, file.Length);
            }

            System.IO.File.Delete(downloadPath + newName);
            return(File(file, mimeType, name));
        }
예제 #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);
     }
 }
예제 #5
0
        public async Task <ResultContract <long> > GetFileLength(string name)
        {
            var result = new ResultContract <long>()
            {
                Code = 0, Msg = "获取成功"
            };

            try
            {
                long fileLength = AliyunOSSHepler.GetInstance().GetFileLength(name);
                result.Data = fileLength;
            }
            catch (Exception e)
            {
                result.Msg  = "获取失败";
                result.Code = -1;
            }

            return(result);
        }
        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());
            }
        }