public async Task Write_File() { string fileName = "testFile"; int totalBlockCount = 2; PartialFile partilFile = new PartialFile { FileName = fileName, Blocks = new List <Block> { new Block { Data = new byte[] { 1, 2, 3, 4, 5 }, Info = new BlockInfo { FileName = fileName, Index = 0, TotalBlockCount = totalBlockCount } }, new Block { Data = new byte[] { 6, 7, 8, 9 }, Info = new BlockInfo { FileName = fileName, Index = 1, TotalBlockCount = totalBlockCount } } } }; SavePartialFileRequest request = new SavePartialFileRequest { PartilFile = partilFile, ForceOwerrite = true }; IActionResult actionResult = await _nodeController.SaveFile(request); OkObjectResult ok = actionResult as OkObjectResult; Assert.NotNull(ok); State state = ok.Value as State; Assert.NotNull(state); Assert.True(state.IsSuccess); Assert.True(_nodeService.FileExist(fileName)); Assert.True(_nodeService.TryGetBlockInfo(fileName, 0, out var info)); Assert.True(_nodeService.TryGetBlockInfo(fileName, 1, out var info2)); }
public async Task <IActionResult> SaveFile(SavePartialFileRequest request) { if (ModelState.IsValid) { State state = await _nodeService.TryAddFile(request.PartilFile, request.ForceOwerrite); if (state) { return(Ok(state)); } else { return(StatusCode(500, state)); } } return(BadRequest(request.PartilFile.FileName)); }
/// <summary> /// Загрузить блоки на узел /// </summary> /// <param name="hostName">Узел</param> /// <param name="blocks">Блоки</param> /// <param name="forceOwerrite">Разрешить перезапись</param> /// <returns></returns> public async Task <HttpResponseMessage> UploadBlocks(string hostName, List <Block> blocks, bool forceOwerrite) { string action = "SaveFile"; SavePartialFileRequest request = new SavePartialFileRequest { ForceOwerrite = forceOwerrite, PartilFile = new PartialFile { FileName = blocks.FirstOrDefault().Info.FileName, Blocks = blocks, TotalBlockCount = blocks.Count } }; JsonContent content = new JsonContent(request); string url = $"{hostName}/{_controller}/{action}"; HttpResponseMessage response = await _httpClient.PostAsync(url, content); return(response); }