Esempio n. 1
0
        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 }));
            }
        }
Esempio n. 2
0
        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("找不到数据块");
            }
        }