AspNet.FileUploadHandler.UploadPartialFile C# (CSharp) Метод

UploadPartialFile() приватный Метод

private UploadPartialFile ( HttpContext context, string uid, string fileName, int chunk, int totalChunks ) : FileDescriptor
context System.Web.HttpContext
uid string
fileName string
chunk int
totalChunks int
Результат FileDescriptor
        private FileDescriptor UploadPartialFile(HttpContext context, string uid, string fileName, int chunk, int totalChunks)
        {
            var fileKey = context.Request.Files.Keys[0];
            var httpFile = context.Request.Files[fileKey];
            var partialFileName = "_" + uid + "_" + fileName;
            var chunkPrefix = "C" + chunk;

            FileDescriptor descriptor = new FileDescriptor(fileKey, PartialPath, chunkPrefix + partialFileName, httpFile.ContentLength);

            using (var fs = new FileStream(descriptor.FilePath, FileMode.Append, FileAccess.Write))
            {
                var buffer = new byte[1024];
                var l = httpFile.InputStream.Read(buffer, 0, 1024);

                while (l > 0)
                {
                    fs.Write(buffer, 0, l);
                    l = httpFile.InputStream.Read(buffer, 0, 1024);
                }

                fs.Flush();
                fs.Close();
            }

            DirectoryInfo d = new DirectoryInfo(PartialPath);
            var files = d.EnumerateFiles("*" + partialFileName).OrderBy(f => Convert.ToInt32(f.Name.Split('_')[0].Replace("C", "")));
            var size = files.Sum(f => f.Length);
            bool allChunksReceived = file.Count() == totalChunks;

            if (!allChunksReceived)
            {
                return descriptor;
            }
            else
            {
                descriptor = new FileDescriptor(fileKey, BasePath, fileName, size);
                RaiseBeforeFileUpload(descriptor, true);

                using (var fs = new FileStream(descriptor.FilePath, FileMode.Append, FileAccess.Write))
                {
                    foreach (var file in files)
                    {
                        using (var pfs = file.OpenRead())
                        {
                            var buffer = new byte[1024];
                            var l = pfs.Read(buffer, 0, 1024);

                            while (l > 0)
                            {
                                fs.Write(buffer, 0, l);
                                l = pfs.Read(buffer, 0, 1024);
                            }

                            pfs.Close();
                        }

                        file.Delete();
                    }

                    fs.Flush();
                    fs.Close();
                }

                RaiseAfterFileUpload(descriptor, true);
                return descriptor;
            }
        }