public BlockTransferResponsed CheckBlockMessage(BlockTransferRequest blockMessage) { bool isError = true; using (var fs = new FileStream(FileNameTools.GetDownloadingFullPath(blockMessage.FileName), FileMode.Open, FileAccess.ReadWrite)) { try { byte[] buffer = new byte[blockMessage.BlockSize]; fs.Position = blockMessage.SeekOffset; fs.Read(buffer, 0, buffer.Length); string md5 = Md5.GetMd5WithBytes(buffer); if (md5 == blockMessage.BlockMd5) { isError = false; } } catch { // ignored } } return(new BlockTransferResponsed() { IsError = isError }); }
public FileTransferResponsed WriteFile(FileTransferRequest transferData) { var id = transferData.RequestId; if (!_contextDic.ContainsKey(transferData.RequestId))//若同一个服务同时上传多个文件,则创建多个维护状态模式的Context,通过RequestID识别 { _contextDic.Add(id, new FileWriteHandleContext(new StateFileFirstUpdate())); ContextRequest contextRequest = new ContextRequest(this._receiveProgressHandler) { WorkingPath = FileNameTools.GetDownloadingFullPath(transferData.FileName) }; _contextRequestDic.Add(id, contextRequest); } _contextRequestDic[id].FileRequest = transferData; #if DEBUG //Console.WriteLine($"Data ID={id}"); #endif var responsed = _contextDic[id].Request(_contextRequestDic[id]); transferData.BlockData = null;//销毁缓存 return(responsed); }