public async Task <HttpReponseViewModel <GenerateMD5ToBurstResViewModel> > GetMD5ToBurstData(Guid id) { HttpReponseViewModel <GenerateMD5ToBurstResViewModel> res = new HttpReponseViewModel <GenerateMD5ToBurstResViewModel>(); var t = await _baseDomain.GetEntity(id); if (t != null) { var filePath = t.RelationFilePath; var fileName = t.FileName + "." + t.FileExt; var len = FileUtil.GetLength(filePath); res.Data = new GenerateMD5ToBurstResViewModel() { Identifier = FileUploadUtil.GetMD5HashFromFile(filePath), TotalSize = len, FilePathUrl = filePath, FileName = fileName, FileRanges = GetFileRangeData(len) }; } else { res.Data = null; res.Message = "该文件不存在"; } res.Code = 200; res.ResultSign = Core.Enum.ResultSign.Info; return(res); }
public bool VaildMergeFile(FileUploadReqViewModel chunkFile) { var clientFileName = chunkFile.FileName; // 文件字节总数 var fileTotalSize = chunkFile.TotalSize; var targetFile = new FileInfo(chunkFile.RelativePath); var streamTotalSize = targetFile.Length; try { if (streamTotalSize != fileTotalSize) { throw new Exception("[" + clientFileName + "]文件上传时发生损坏,请重新上传"); } // 对文件进行 MD5 唯一验证 var identifier = chunkFile.Identifier; var fileMd5 = FileUploadUtil.GetMD5HashFromFile(chunkFile.RelativePath); if (!fileMd5.Equals(identifier)) { throw new Exception("[" + clientFileName + "],文件MD5值不对等"); } return(true); } catch (Exception ex) { // 删除本地错误文件 File.Delete(chunkFile.RelativePath); return(false); } }
public async Task <HttpReponseViewModel <GenerateMD5ToBurstResViewModel> > GetMD5ToBurstData(string filePath) { filePath = @"D:\Files\BI_V2.0.zip"; //filePath = @"D:\Files\Files.zip"; HttpReponseViewModel <GenerateMD5ToBurstResViewModel> res = new HttpReponseViewModel <GenerateMD5ToBurstResViewModel>(); return(await Task.Run(() => { long len = FileUtil.GetLength(filePath); res.Code = 20000; res.Data = new GenerateMD5ToBurstResViewModel() { Identifier = FileUploadUtil.GetMD5HashFromFile(filePath), TotalSize = len, FileName = filePath, FileRanges = _downloadServices.GetFileRangeData(len) }; return res; })); }
/// <summary> /// 文件检查 /// </summary> /// <param name="request"></param> /// <returns></returns> public HttpReponseViewModel <List <int> > CheckFileState(HttpRequest request) { FileUploadReqViewModel fileUpload = new FileUploadReqViewModel(); if (request.Query.Count() > 0) { foreach (var item in request.Query.ToList()) { if (item.Key == "chunkNumber") { fileUpload.ChunkNumber = Convert.ToInt32(item.Value); } if (item.Key == "chunkSize") { fileUpload.ChunkSize = Convert.ToInt32(item.Value); } if (item.Key == "currentChunkSize") { fileUpload.CurrentChunkSize = Convert.ToInt32(item.Value); } if (item.Key == "totalSize") { fileUpload.TotalSize = Convert.ToInt32(item.Value); } if (item.Key == "identifier") { fileUpload.Identifier = item.Value; } if (item.Key == "filename") { fileUpload.FileName = item.Value; } if (item.Key == "relativePath") { fileUpload.RelativePath = item.Value; } if (item.Key == "totalChunks") { fileUpload.TotalChunks = Convert.ToInt32(item.Value); } if (item.Key == "fileExt") { fileUpload.FileExt = item.Value; } if (item.Key == "fileType") { fileUpload.FileType = item.Value; } if (item.Key == "fileCategory") { fileUpload.FileCategory = item.Value; } } } var webRoot = AppConfigUtil.FilePath; FileUploadResViewModel fileUploadRes = new FileUploadResViewModel(); fileUploadRes.FState = 0;//新文件 //状态 var fstate = 0; List <int> uploadedList = new List <int>(); var md5Folder = FileUploadUtil.GetFileMd5Folder(webRoot, fileUpload.Identifier); //判断这个md5临时文件夹存不存在 存在证明可以用断点续传 返回已经上传分片文件 if (Directory.Exists(md5Folder)) { fstate = 1;//可以断点续传 //删除最后一块分片 防止出现破损 uploadedList = FileUploadUtil.DelLastSourceFileRef(md5Folder); } else { //判断改文件存不存在 var path = FileUploadUtil.GetPath(webRoot) + fileUpload.FileName; if (FileUtil.IsExistFile(path)) { //判断该文件是不是已经上传过了 上传过了就秒传 直接拿已经存在的地址url var fileMd5 = FileUploadUtil.GetMD5HashFromFile(path); if (fileMd5.Equals(fileUpload.Identifier)) { fstate = 2;//已经存在该文件 fileUploadRes.FilePathUrl = path; } } } return(new HttpReponseViewModel <List <int> > { Code = 200, Data = uploadedList, Flag = true, ResultSign = (ResultSign)fstate }); }