0

当您尝试使用 turbolinks-android 包上传文件时,没有任何反应。据推测,这是因为您需要编写自己的文件上传器处理程序?

如何才能做到这一点?我希望用户能够按下上传按钮,然后拍照并将其附加到 HTML 文件字段。

另外,这将如何在 turbolinks-ios 上完成?

4

1 回答 1

2

您可以将 WebChromeClient 附加到 Turbolinks Web 视图。请注意,给定的示例适用于 API21+,当在 web 视图中单击文件上传按钮时,较低的 api 使用不同的功能。

将此添加到文件的顶部:

private ValueCallback<Uri[]> mUploadMessage;
private final static int REQUESTCODE_FILEPICKER = 100; // or any other int

并将其添加到您的 onCreate() 函数中:

TurbolinksSession.getDefault(this).getWebView().setWebChromeClient(new WebChromeClient() {

        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) {

            if (mUploadMessage != null) {
                mUploadMessage.onReceiveValue(null);
            }
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("application/pdf");
            startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUESTCODE_FILEPICKER);

            return true;
        }

    });

最后:将此添加到您的 onActivityResult() 函数以处理上传的文件:

  if (requestCode == REQUESTCODE_FILEPICKER) {
        if (data == null ) {
            mUploadMessage.onReceiveValue(null);
            mUploadMessage = null;
            return;
        }
        String dataString = data.getDataString();
        if (dataString != null) {
            Uri[] results = new Uri[]{Uri.parse(dataString)};
            mUploadMessage.onReceiveValue(results);
            mUploadMessage = null;
            return;
        }
        mUploadMessage.onReceiveValue(null);
        return;
    }

希望这可以帮助你!

于 2016-11-29T09:10:36.353 回答