Exemplo n.º 1
0
    /// <summary>
    /// Initializes a new instance of <see cref="MultipartReader"/>.
    /// </summary>
    /// <param name="boundary">The multipart boundary.</param>
    /// <param name="stream">The <see cref="Stream"/> containing multipart data.</param>
    /// <param name="bufferSize">The minimum buffer size to use.</param>
    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
        };
    }
Exemplo n.º 2
0
    /// <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)
    {
        if (stream == null)
        {
            throw new ArgumentNullException(nameof(stream));
        }

        if (boundary == null)
        {
            throw new ArgumentNullException(nameof(boundary));
        }

        _bytePool    = bytePool;
        _innerStream = stream;
        _innerOffset = _innerStream.CanSeek ? _innerStream.Position : 0;
        _boundary    = boundary;
    }
        /// <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)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            if (boundary == null)
            {
                throw new ArgumentNullException(nameof(boundary));
            }

            _bytePool = bytePool;
            _innerStream = stream;
            _innerOffset = _innerStream.CanSeek ? _innerStream.Position : 0;
            _boundary = boundary;
        }
Exemplo n.º 4
0
 /// <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)
 {
 }
 /// <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)
 {
 }