все. Я застрял в этом проекте, над которым я работаю. Я хочу, чтобы иметь возможность загружать изображение из галереи Android, кодировать это изображение в строку base64 и отправлять в веб-службу PHP, как переменную get, а затем декодировать изображение с другого конца и делать с ним, как я хочу.Как загрузить изображение с android на php с помощью asynctask
Пока что я могу выбрать изображение, из галереи и даже закодировать строку base64 и сохранить в настройках андроида.
Проблема в том, что я думаю, что не вся строка отправляется на службу PHP (некоторые усекаются).
Почему я так думаю? Мой Log.d показал мне разные строки при сбрасывании в разных местах.
код, который получает изображение и кодирует это: -
private void galleryIntent()
{
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Please select a file"),1);
}
private String onSelectFromGalleryResult (Intent data) {
if (data != null) {
try {
bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver() , data.getData()) ;
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream() ;
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream) ;
byte[] imageBytes = byteArrayOutputStream.toByteArray() ;
Log.d ("Selected Image Gallery" , Base64.encodeToString(imageBytes, Base64.DEFAULT)) ;
return Base64.encodeToString (imageBytes, Base64.DEFAULT) ;
} else {
return null ;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
SharedPreferences sharedPreferences = getContext().getSharedPreferences("MyOnActivityResultPref" , Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit() ;
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
/*Here we handle the image gotten from the gallery*/
String encodedGalleryImage = onSelectFromGalleryResult(data);
editor.putString("userEncodedGalleryImage" , encodedGalleryImage);
} else if (requestCode == 0) {
/*Here we handle the image that was take using the camera*/
}
editor.apply();
}
}
Здесь мы называем класс AsyncTask
private void callAsynctask() {
SharedPreferences sp = getContext().getSharedPreferences("MyOnActivityResultPref" , Context.MODE_PRIVATE);
String userQuestionAttachement = sp.getString("userEncodedGalleryImage" , "") ;
Log.d("callingEncodedImage" , userQuestionAttachement) ;
}
У меня есть проблема в том, что бревно из Log.d ("Selected Галерея изображений ", Base64.encodeToString (imageBytes, Base64.DEFAULT)); отличается от Log.d («callEncodedImage», userQuestionAttachement);
Там оба имеют одинаковый начало, но различные окончания. Я ожидаю увидеть те же персонажи.
Может кто-нибудь, пожалуйста, помогите мне разобраться?
base64 string иногда может быть слишком большим для отправки за один раз. Лучше будет загружать файл изображения с помощью multipart. –
Привет @VivekMishra, как вы это сделаете? Я думаю, что это то, что мне нужно! ... –