如何在 CefSharp 中读取上传的文件?

How can I read uploaded file in CefSharp?

用户使用我的浏览器基于CefSharp。他使用 XMLHttpRequest 将文件(在文件输入 HTML 控件中选择)上传到已知服务器(它是 AJAX 请求的 JavaScript 对象)。我想拦截并在我的浏览器中读取上传文件。

我在基于 Awesomium 的浏览器中使用 IResourceInterceptor 执行相同的操作。这很容易,因为 ResourceRequest 参数包含文件的完整本地路径。我怎样才能在 CefSharp 浏览器中做同样的事情?

用户如何使用 XMLHttpRequest (JavaScript) 上传文件:

var file = document.getElementById('fileInput').files[0];
var formData = new FormData();
formData.append('file', file);

var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';

xhr.open('POST', '/upload', true);
xhr.send(formData);

Awesomium 拦截用户文件的方式(C#):

class MyResourceInterceptor : IResourceInterceptor
{
    public ResourceResponse OnRequest(ResourceRequest request)
    {
        // intercept URL with /upload path only
        if (request.Url.AbsolutePath != "/upload")
        {
            return null;
        }

        // full local path for user's file
        var filePath = request[1].FilePath;

        // now I can read and process the file
    }

    public bool OnFilterNavigation(NavigationRequest request)
    {
        return false;
    }
}

CefSharp 目前没有提供访问 Post Data 的方法,我猜你需要的是什么。

我已经实现了一个包含基本实现的 PR,请随意测试。参见 https://github.com/cefsharp/CefSharp/pull/1113

您的另一个选择是实现 OnFileDialog,您必须显示自己的对话框,虽然很简单。 https://github.com/cefsharp/CefSharp/blob/cefsharp/41/CefSharp/IDialogHandler.cs#L38