如何上传照片从图书馆在webview在android应用程序

How to upload photo from library in webview in android app

本文关键字:webview android 应用程序 图书馆 照片      更新时间:2023-09-26

我在我的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=''/>标记上以显示所选图像。路径类似于'/storage/emululated/0/DCIM/Camera/IMG_20160808_200837.jpg'

这里工作得很好。但现在我想把这张图片上传到后端服务器。javascript如何处理这个路径:/storage/emululated/0/DCIM/Camera/IMG_20160808_200837.jpg.

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

ValueCallback filePathCallback;

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

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

filePathCallback.onReceiveValue(结果);

那么在HTML上你会得到file在