private static void FetchUploadFiles(Stream requestStream, byte[] boundarybuffer, string[] files, Encoding encoding, byte[] allRequestBuffer, Action <decimal> completePercentFacotry) { string _headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; byte[] _buffer = new byte[4096]; int _offset = 0; int _completeOffset = 0; DateTime _uploadFilesStartTime = DateTime.Now; for (int i = 0; i < files.Length; i++) { requestStream.Write(boundarybuffer, 0, boundarybuffer.Length); string _header = string.Format(_headerTemplate, "file" + i, Path.GetFileName(files[i])); byte[] _headerbytes = encoding.GetBytes(_header); requestStream.Write(_headerbytes, 0, _headerbytes.Length); using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read)) { while ((_offset = fileStream.Read(_buffer, 0, _buffer.Length)) != 0) { _completeOffset = _completeOffset + _offset; requestStream.Write(_buffer, 0, _offset); if ((DateTime.Now - _uploadFilesStartTime).TotalMilliseconds >= 10 || _completeOffset == fileStream.Length) { decimal _percent = DecimalHelper.CalcPercentage(_completeOffset, fileStream.Length); completePercentFacotry(_percent); _uploadFilesStartTime = DateTime.Now; } } } } requestStream.Write(allRequestBuffer, 0, allRequestBuffer.Length); }