0

使用 AngleSharp,我如何指定要填写的文件<input type="file" name="myInputFile">?我读过这个 StackOverflow question,但它似乎与我预期的情况不同。我正在尝试在上传我选择的文件时以编程方式填写表格。

4

1 回答 1

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 类型并具有构造函数重载以允许传入(本地)文件路径等。

希望这可以帮助!

于 2017-12-13T21:22:04.020 回答