Android上传图片
准备工作
1、在AndroidManifest.xml文件中添加网络权限和读写存储权限:
<usespermission android:name="android.permission.INTERNET" /> <usespermission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <usespermission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2、在build.gradle文件中添加Glide依赖:
implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
选择图片并获取图片Uri
1、使用Intent打开系统的图片选择器,允许用户选择图片:
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_IMAGE_REQUEST_CODE);
2、在onActivityResult方法中获取返回的图片Uri:
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST_CODE && resultCode == RESULT_OK && data != null) { Uri selectedImageUri = data.getData(); // 使用Glide加载图片并显示在ImageView上 Glide.with(this).load(selectedImageUri).into(imageView); } }
上传图片到服务器
1、创建一个方法用于上传图片:
private void uploadImage() { // 使用Glide加载图片并转换为字节数组 byte[] imageBytes = Glide.with(this).asBitmap().load(selectedImageUri).toByteArray(); // 将字节数组转换为Base64编码的字符串 String imageBase64 = Base64.encodeToString(imageBytes, Base64.DEFAULT); // 创建请求体,包含图片的Base64编码和其他必要的参数 RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image", "image.jpg", RequestBody.create(MediaType.parse("image/jpeg"), imageBytes)) // 根据实际情况修改文件名和类型 // 添加其他参数... .build(); // 创建请求对象,设置请求方式、URL等参数,并添加请求体 Request request = new Request.Builder() .url("https://example.com/upload") // 根据实际情况修改上传地址 .post(requestBody) .build(); // 发送请求,处理响应结果 OkHttpClient client = new OkHttpClient(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { // 上传成功,处理响应数据... } else { // 上传失败,处理错误信息... } } }); }
相关问题与解答
问题1:为什么需要添加网络权限和读写存储权限?
答案:网络权限是用于访问网络资源,例如上传图片时需要连接到服务器,读写存储权限是用于读取外部存储中的图片文件,为了实现上传图片功能,需要添加这两个权限。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/527275.html