public void ReadingFile(string path) { FileInfo fi = new FileInfo(path); int countP; if ((fi.Length % 1048576) != 0) { countP = Convert.ToInt32(fi.Length / 1048576) + 1; } else { countP = Convert.ToInt32(fi.Length / 1048576); } string hash = ComputeMD5Checksum(path); var allBytes = File.ReadAllBytes(path); int part = 1; int partsize = 1024 * 1024; int position = 0; for (int i = 0; i < allBytes.Length; i += partsize) { byte[] partbytes = new byte[Math.Min(partsize, allBytes.Length - i)]; for (int j = 0; j < partbytes.Length; j++) { partbytes[j] = allBytes[position++]; } FileChunk fc = new FileChunk() { Hash = hash, Content = partbytes, ChunkN = part, FileName = fi.Name, ChunkCount = countP }; SendF(fc); part++; } }
static void func(FileStream fs, byte[] bytes, int partitionCount, string id) { Console.WriteLine(fs.Length); while (fs.Position != fs.Length) { FileChunk filechunk = new FileChunk(); if (fs.Length - fs.Position < bytes.Length) { Console.WriteLine("End: " + (fs.Length - fs.Position).ToString()); byte[] temp = new byte[fs.Length - fs.Position]; fs.Read(temp, 0, Convert.ToInt32(fs.Length - fs.Position)); partitionsCount++; filechunk.FileId = id; filechunk.Content = temp; filechunk.ChunkNo = partitionsCount; filechunk.Position = fs.Position; } else { fs.Read(bytes, 0, bytes.Length); partitionsCount++; filechunk.FileId = id; filechunk.Content = bytes; filechunk.ChunkNo = partitionsCount; filechunk.Position = fs.Position; } Console.WriteLine(fs.Position.ToString()); var containerAsJson = JsonConvert.SerializeObject(filechunk); var body = Encoding.UTF8.GetBytes(containerAsJson); channel.BasicPublish(exchange: "", routingKey: "files_to_process_queue", basicProperties: null, body: body); } }
static void Main(string[] args) { string path = @"C:\Users\Zhanibek\Desktop\rise.mp4"; string id = Guid.NewGuid().ToString(); int partitionsCount = 0; var bytes = new byte[(1024 * 1024) * 4]; var factory = new ConnectionFactory() { HostName = "localhost", UserName = "******", Password = "******" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "files_to_process_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { Console.WriteLine(fs.Length); while (fs.Position != fs.Length) { FileChunk filechunk = new FileChunk(); if (fs.Length - fs.Position < bytes.Length) { Console.WriteLine("End: " + (fs.Length - fs.Position).ToString()); byte[] temp = new byte[fs.Length - fs.Position]; fs.Read(temp, 0, Convert.ToInt32(fs.Length - fs.Position)); partitionsCount++; filechunk.FileId = id; filechunk.Content = temp; filechunk.ChunkNo = partitionsCount; filechunk.Position = fs.Position; } else { fs.Read(bytes, 0, bytes.Length); partitionsCount++; filechunk.FileId = id; filechunk.Content = bytes; filechunk.ChunkNo = partitionsCount; filechunk.Position = fs.Position; } Console.WriteLine(fs.Position.ToString()); var containerAsJson = JsonConvert.SerializeObject(filechunk); var body = Encoding.UTF8.GetBytes(containerAsJson); channel.BasicPublish(exchange: "", routingKey: "files_to_process_queue", basicProperties: null, body: body); } Console.ReadLine(); } } }