public IActionResult ValidateFile([FromBody] ValidateFileModel model) { var folder = Path.Combine(_hostingEnvironment.WebRootPath, "chunk\\" + model.uid + "\\"); // 扩展名 var extName = model.fileName.Substring(model.fileName.LastIndexOf('.')).Replace("\"", ""); if (Directory.GetFiles(folder).Length == model.chunks)//总文件数等于总切片数 { model.extName = extName; var filename = MergeFiles(model); return(Ok(new { isValid = true })); } else { return(Ok(new { isValid = false })); } }
public string MergeFiles(ValidateFileModel model) { string sourcePath = Path.Combine(_hostingEnvironment.WebRootPath, "chunk\\" + model.uid + "\\"); //源数据文件夹 string fileName = Guid.NewGuid().ToString(); string targetPath = Path.Combine(_hostingEnvironment.WebRootPath, $"{fileName}.{model.extName}"); //合并后的文件 DirectoryInfo dicInfo = new DirectoryInfo(sourcePath); if (Directory.Exists(Path.GetDirectoryName(sourcePath))) { FileInfo[] files = dicInfo.GetFiles(); foreach (FileInfo file in files.OrderBy(f => int.Parse(f.Name))) { FileStream addFile = new FileStream(targetPath, FileMode.Append, FileAccess.Write); BinaryWriter AddWriter = new BinaryWriter(addFile); //获得上传的分片数据流 Stream stream = file.Open(FileMode.Open); BinaryReader TempReader = new BinaryReader(stream); //将上传的分片追加到临时文件末尾 AddWriter.Write(TempReader.ReadBytes((int)stream.Length)); //关闭BinaryReader文件阅读器 TempReader.Close(); stream.Close(); AddWriter.Close(); addFile.Close(); TempReader.Dispose(); stream.Dispose(); AddWriter.Dispose(); addFile.Dispose(); } DeleteFolder(sourcePath); return(fileName); } else { throw new IOException("找不到数据块"); } }