/// <summary>
 /// Creates a stream that reads until it reaches the given boundary pattern.
 /// </summary>
 /// <param name="stream">The <see cref="BufferedReadStream"/>.</param>
 /// <param name="boundary">The boundary pattern to use.</param>
 /// <param name="bytePool">The ArrayPool pool to use for temporary byte arrays.</param>
 public MultipartReaderStream(BufferedReadStream stream, MultipartBoundary boundary, ArrayPool <byte> bytePool)
 {
     _bytePool    = bytePool;
     _innerStream = stream ?? throw new ArgumentNullException(nameof(stream));
     _innerOffset = _innerStream.CanSeek ? _innerStream.Position : 0;
     _boundary    = boundary ?? throw new ArgumentNullException(nameof(boundary));
 }
Example #2
0
 public MultipartReader(string boundary, Stream stream, int bufferSize)
 {
     if (boundary == null)
     {
         throw new ArgumentNullException(nameof(boundary));
     }
     if (stream == null)
     {
         throw new ArgumentNullException(nameof(stream));
     }
     if (bufferSize < boundary.Length + 8) // Size of the boundary + leading and trailing CRLF + leading and trailing '--' markers.
     {
         throw new ArgumentOutOfRangeException(nameof(bufferSize), bufferSize, "Insufficient buffer space, the buffer must be larger than the boundary: " + boundary);
     }
     _stream   = new BufferedReadStream(stream, bufferSize);
     _boundary = new MultipartBoundary(boundary, false);
     // This stream will drain any preamble data and remove the first boundary marker.
     // TODO: HeadersLengthLimit can't be modified until after the constructor.
     _currentStream = new MultipartReaderStream(_stream, _boundary)
     {
         LengthLimit = HeadersLengthLimit
     };
 }
 /// <summary>
 /// Creates a stream that reads until it reaches the given boundary pattern.
 /// </summary>
 /// <param name="stream">The <see cref="BufferedReadStream"/>.</param>
 /// <param name="boundary">The boundary pattern to use.</param>
 public MultipartReaderStream(BufferedReadStream stream, MultipartBoundary boundary)
     : this(stream, boundary, ArrayPool <byte> .Shared)
 {
 }