NameValueCollection ExtractMultipartFormDataArgumentsFromDataList(ICommunicationContext ctx, StreamReader reader) { var provider = _multipartMemoryStreamProviderFactory.New(); var tempStream = _memoryStreamFactory.New(); var reqContentStream = ctx.Request.Content.ReadAsStreamAsync().Result; reqContentStream.CopyTo(tempStream); var byteArray = reader.BaseStream.ToByteArray(); var stream = _memoryStreamFactory.New(byteArray); stream.CopyTo(tempStream); tempStream.Seek(0, SeekOrigin.End); var writer = _streamWriterFactory.New(tempStream); writer.WriteLine(); writer.Flush(); tempStream.Position = 0; var streamContent = _streamContentFactory.New(tempStream); var requestContentHeaders = ctx.Request.Content.Headers; foreach (var header in requestContentHeaders.Headers) { streamContent.Headers.Add(header.Key, header.Value); } streamContent.ReadAsMultipartAsync(provider).Wait(); var valuePairs = new NameValueCollection(); foreach (HttpContent content in provider.Contents) { var contentDisposition = content.Headers.ContentDisposition; var name = contentDisposition.Name.Trim('"'); var byteData = content.ReadAsByteArrayAsync().Result; var contentType = content.Headers.ContentType; var mediaType = contentType?.MediaType; if (mediaType == null) { valuePairs.Add(name, byteData.ReadToString()); continue; } valuePairs.Add(name, byteData.ToBase64String()); } return(valuePairs); }
int WriteData(Stream src, IActivityIOPath dst) { var streamLength = (int)src.Length; if (_arguments.Overwrite) { _fileWrapper.WriteAllBytes(dst.Path, src.ToByteArray()); return(streamLength); } if (FileExist(dst, _fileWrapper) || !_arguments.Overwrite) { using (var stream = _fileStreamFactory.New(dst.Path, FileMode.Append)) { _memoryStreamFactory.New(src.ToByteArray()).CopyTo(stream); } return(streamLength); } return(-1); }