MultipartFormDataSetVisitor
using AngleSharp.Dom.Io;
using AngleSharp.Extensions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace AngleSharp.Html.Submitters
{
internal sealed class MultipartFormDataSetVisitor : IFormSubmitter, IFormDataSetVisitor
{
private static readonly string DashDash = "--";
private readonly Encoding _encoding;
private readonly List<Action<StreamWriter>> _writers;
private readonly string _boundary;
public MultipartFormDataSetVisitor(Encoding encoding, string boundary)
{
_encoding = encoding;
_writers = new List<Action<StreamWriter>>();
_boundary = boundary;
}
public void Text(FormDataSetEntry entry, string value)
{
if (entry.HasName && value != null)
_writers.Add(delegate(StreamWriter stream) {
stream.WriteLine("Content-Disposition: form-data; name=\"{0}\"", new object[1] {
entry.Name.HtmlEncode(_encoding)
});
stream.WriteLine();
stream.WriteLine(value.HtmlEncode(_encoding));
});
}
public void File(FormDataSetEntry entry, string fileName, string contentType, IFile content)
{
if (entry.HasName)
_writers.Add(delegate(StreamWriter stream) {
bool flag = content != null && content?.Name != null && content.Type != null && content.Body != null;
stream.WriteLine("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"", new object[2] {
entry.Name.HtmlEncode(_encoding),
fileName.HtmlEncode(_encoding)
});
stream.WriteLine("Content-Type: {0}", new object[1] {
contentType
});
stream.WriteLine();
if (flag) {
stream.Flush();
content.Body.CopyTo(stream.BaseStream);
}
stream.WriteLine();
});
}
public void Serialize(StreamWriter stream)
{
foreach (Action<StreamWriter> writer in _writers) {
stream.Write(DashDash);
stream.WriteLine(_boundary);
writer(stream);
}
stream.Write(DashDash);
stream.Write(_boundary);
stream.Write(DashDash);
}
}
}