예제 #1
0
        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);
        }