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