如何在Android应用程序的webview中上传库中的照片

时间:2016-09-10 12:32:20

标签: javascript android image webview

我在我的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。

1 个答案:

答案 0 :(得分:0)

您可以使用filePathCallback将所选文件传递给webview。 只需创建一个全局变量

ValueCallback filePathCallback;

并将onShowFileChooser()方法的参数赋值给它。 然后你可以在onActivityResult()中使用这个回调来将所选文件传递给webview:

Uri results [] = new Uri [] {imageUri};

filePathCallback.onReceiveValue(结果);

然后在html上你将获得文件