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;
}
}