当您尝试使用 turbolinks-android 包上传文件时,没有任何反应。据推测,这是因为您需要编写自己的文件上传器处理程序?
如何才能做到这一点?我希望用户能够按下上传按钮,然后拍照并将其附加到 HTML 文件字段。
另外,这将如何在 turbolinks-ios 上完成?
当您尝试使用 turbolinks-android 包上传文件时,没有任何反应。据推测,这是因为您需要编写自己的文件上传器处理程序?
如何才能做到这一点?我希望用户能够按下上传按钮,然后拍照并将其附加到 HTML 文件字段。
另外,这将如何在 turbolinks-ios 上完成?
您可以将 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;
}
希望这可以帮助你!