public override int Read()

in Darabonba/Utils/FileFormStream.cs [66:144]


        public override int Read(byte[] buffer, int offset, int count)
        {
            if (streaming)
            {
                int bytesRLength;
                if (streamingStream != null && (bytesRLength = streamingStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    return bytesRLength;
                }
                else
                {
                    streaming = false;
                    if (streamingStream != null && streamingStream.CanSeek)
                    {
                        streamingStream.Seek(0, SeekOrigin.Begin);
                    }
                    streamingStream = null;
                    byte[] bytesFileEnd = Encoding.UTF8.GetBytes("\r\n");
                    for (int i = 0; i < bytesFileEnd.Length; i++)
                    {
                        buffer[i] = bytesFileEnd[i];
                    }
                    index++;
                    return bytesFileEnd.Length;
                }
            }

            if (index < keys.Count)
            {
                string name = this.keys[this.index];
                object fieldValue = form[name];
                if (fieldValue is FileField)
                {
                    FileField fileField = (FileField) fieldValue;

                    streaming = true;
                    streamingStream = fileField.Content;
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append("--").Append(boundary).Append("\r\n");
                    stringBuilder.Append("Content-Disposition: form-data; name=\"").Append(name).Append("\"; filename=\"").Append(fileField.Filename).Append("\"\r\n");
                    stringBuilder.Append("Content-Type: ").Append(fileField.ContentType).Append("\r\n\r\n");
                    byte[] startBytes = Encoding.UTF8.GetBytes(stringBuilder.ToString());
                    for (int i = 0; i < startBytes.Length; i++)
                    {
                        buffer[i] = startBytes[i];
                    }
                    return startBytes.Length;
                }
                else
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append("--").Append(boundary).Append("\r\n");
                    stringBuilder.Append("Content-Disposition: form-data; name=\"").Append(name).Append("\"\r\n\r\n");
                    stringBuilder.Append(fieldValue.ToString()).Append("\r\n");
                    byte[] formBytes = Encoding.UTF8.GetBytes(stringBuilder.ToString());
                    for (int i = 0; i < formBytes.Length; i++)
                    {
                        buffer[i] = formBytes[i];
                    }
                    index++;
                    return formBytes.Length;
                }
            }
            else if (index == keys.Count)
            {
                string endStr = string.Format("--{0}--\r\n", boundary);
                byte[] endBytes = Encoding.UTF8.GetBytes(endStr);
                for (int i = 0; i < endBytes.Length; i++)
                {
                    buffer[i] = endBytes[i];
                }
                index++;
                return endBytes.Length;
            }
            else
            {
                return 0;
            }
        }