Пример #1
0
        public async Task <IActionResult> InputChunksNew(ChunksOfFiles chunksOfFiles)
        {
            await fileManager.InputChunks(chunksOfFiles);

            return(Ok("Chunks getting"));
        }
Пример #2
0
        public async Task InputChunks(ChunksOfFiles chunksOfFiles)
        {
            var res      = downoloadFiles.FirstOrDefault(c => c.FileId == chunksOfFiles.FileId && c.FileName == chunksOfFiles.FileName);
            var sameFile = await context.StoredFiles.FindAsync(c => c.FileName == chunksOfFiles.FileName);

            var file = await sameFile.FirstOrDefaultAsync();


            if (file == null)
            {
                if (res != null)
                {
                    int count = res.chunks.Count;

                    if (count < chunksOfFiles.TotalCounts)
                    {
                        res.chunks.Add(chunksOfFiles);
                    }

                    if (count == chunksOfFiles.TotalCounts - 1)
                    {
                        var    listofChunks = res.chunks.OrderBy(c => c.n);
                        byte[] finalChunks  = null;
                        using (MemoryStream memory = new MemoryStream())
                        {
                            foreach (var i in listofChunks)
                            {
                                byte[] chunks = Convert.FromBase64String(i.ChunksData);
                                memory.Write(chunks);
                            }
                            finalChunks = memory.ToArray();
                        }

                        await StoredFile(res.FileName, finalChunks);

                        downoloadFiles.Remove(res);
                    }
                }
                else
                {
                    var downoloadFile = new DownoloadFile()
                    {
                        FileId     = chunksOfFiles.FileId,
                        FileName   = chunksOfFiles.FileName,
                        TotalCount = chunksOfFiles.TotalCounts,
                        chunks     = new List <ChunksOfFiles>
                        {
                            chunksOfFiles
                        },
                        LastDownoloadTime = DateTime.Now,
                    };
                    downoloadFiles.Add(downoloadFile);

                    if (chunksOfFiles.TotalCounts == 1)
                    {
                        byte[] chunkByte = Convert.FromBase64String(chunksOfFiles.ChunksData);
                        await StoredFile(chunksOfFiles.FileName, chunkByte);

                        downoloadFiles.Remove(res);
                    }
                }
            }
        }