Используя AngleSharp, как указать файл для заполнения <input type="file" name="myInputFile">
? Я прочитал этот вопрос StackOverflow , но похоже, что это отличается от моего предполагаемого случая. Я пытаюсь заполнить форму программно, загружая файл по своему выбору.
Как указать входной файл в DOM типа ‹input type='file'› с помощью AngleSharp?
Ответы (1)
Каждый IHtmlInputElement
имеет свойство Files
, которое можно использовать для добавления файлов.
var input = document.QuerySelector<IHtmlInputElement>("input[type=file][name=myInputFile]");
input?.Files.Add(file);
В ранее использованном примере переменная file
относится к любому экземпляру IFile
. AngleSharp — это PCL, не имеющая правильной реализации «из коробки», однако простая может выглядеть так:
class FileEntry : IFile
{
private readonly String _fileName;
private readonly Stream _content;
private readonly String _type;
private readonly DateTime _modified;
public FileEntry(String fileName, String type, Stream content)
{
_fileName = fileName;
_type = type;
_content = content;
_modified = DateTime.Now;
}
public Stream Body
{
get { return _content; }
}
public Boolean IsClosed
{
get { return _content.CanRead == false; }
}
public DateTime LastModified
{
get { return _modified; }
}
public Int32 Length
{
get
{
return (Int32)_content.Length;
}
}
public String Name
{
get { return _fileName; }
}
public String Type
{
get { return _type; }
}
public void Close()
{
_content.Close();
}
public void Dispose()
{
_content.Dispose();
}
public IBlob Slice(Int32 start = 0, Int32 end = Int32.MaxValue, String contentType = null)
{
var ms = new MemoryStream();
_content.Position = start;
var buffer = new Byte[Math.Max(0, Math.Min(end, _content.Length) - start)];
_content.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, buffer.Length);
_content.Position = 0;
return new FileEntry(_fileName, _type, ms);
}
}
Более сложный вариант будет автоматически определять тип MIME и иметь перегрузки конструктора, позволяющие передавать (локальные) пути к файлам и т. д.
Надеюсь это поможет!
person
Florian Rappl
schedule
13.12.2017
Это определенно помогает. Спасибо!
- person Nik A.; 21.02.2018