我在我的Android应用程序上使用webview组件。用户可以从Android照片库加载图像,并在webview中的网页上显示这些图像。如何从javascript将这些图像上传到我的后端服务器?
以下是我处理图像选择器行为的java代码:
setWebChromeClient(new WebChromeClient() {
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
Intent chooser = Intent.createChooser(intent, "Select Image");
activity.startActivityForResult(chooser, ResultCode.CHOOSE_PHOTO_REQUEST);
return false;
}
});
上面的代码将显示图像选择器,当用户选择图像时,onActivityResult会将选定的图像路径传递给javascript,如下所示:
if (resultCode == Activity.RESULT_OK) {
Uri imageUri = imageReturnedIntent.getData();
Log.d("IMAGE", "choose image uri " + imageUri);
String path = getRealPathFromURI(imageUri);
Log.d("IMAGE", "choose image real path " + path);
webView.loadUrl("javascript:choosePhotos('" + path + "')");
}
public String getRealPathFromURI(Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {MediaStore.Images.Media.DATA};
cursor = mainActivity.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
在javascript中,我可以将图片路径放在<img src=''/>
标记上以显示所选图片。路径是这样的:&#39; /storage/emulated/0/DCIM/Camera/IMG_20160808_200837.jpg'
这里工作正常。但现在我想将此图像上传到我的后端服务器。 javascript如何处理此路径:/storage/emulated/0/DCIM/Camera/IMG_20160808_200837.jpg。
答案 0 :(得分:0)
您可以使用filePathCallback将所选文件传递给webview。 只需创建一个全局变量
ValueCallback filePathCallback;
并将onShowFileChooser()方法的参数赋值给它。 然后你可以在onActivityResult()中使用这个回调来将所选文件传递给webview:
Uri results [] = new Uri [] {imageUri};
filePathCallback.onReceiveValue(结果);
然后在html上你将获得文件