android 上传图片给js,Android BridgeWebView在JS交互下上传图片 Base64报错
时间: 2023-12-06 16:44:21 浏览: 31
在Android和JS之间传递图片通常有两种方式,一种是通过Base64编码的方式传递,另一种是通过文件路径传递。
如果你选择使用Base64编码的方式传递图片,在Android端需要将图片转换为Base64字符串,然后将其传递给JS。在JS端接收到Base64字符串后,需要将其转换为图片进行展示或者上传。
以下是一个简单的示例代码:
Android端代码:
```java
// 将图片转换为Base64字符串
public String imageToBase64(String path) {
Bitmap bitmap = BitmapFactory.decodeFile(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] bytes = baos.toByteArray();
return Base64.encodeToString(bytes, Base64.DEFAULT);
}
// 将Base64字符串传递给JS
webView.loadUrl("javascript:showImage('" + imageToBase64(path) + "')");
```
JS端代码:
```javascript
// 接收Base64字符串,并将其转换为图片
function showImage(base64String) {
var img = document.createElement('img');
img.src = 'data:image/png;base64,' + base64String;
document.body.appendChild(img);
}
```
如果你想通过文件路径传递图片,可以参考下面的示例代码:
Android端代码:
```java
// 选择图片
private void chooseImage() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_CHOOSE_IMAGE);
}
// 将文件路径传递给JS
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CHOOSE_IMAGE && resultCode == RESULT_OK) {
Uri uri = data.getData();
String path = getPath(uri);
webView.loadUrl("javascript:showImage('" + path + "')");
}
}
// 获取文件路径
private String getPath(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
cursor.close();
return path;
}
```
JS端代码:
```javascript
// 接收文件路径,并将其展示或者上传
function showImage(path) {
var img = document.createElement('img');
img.src = path;
document.body.appendChild(img);
}
```
以上是两种常见的在Android和JS之间传递图片的方式,你可以根据具体的需求选择适合自己的方式。