whats is the best/fastest way to upload images from android to mysql?
the problem that im having that uploading images encoded in base46 that it takes almost 10sec and after 3 or 4 uploads using bitmap the app crashes sometimes because bitmap other because of the encoded images on old android phone.. right now im using ION but i guess ion isnt the best right now as 10sec i find it alot and on more question should i send them as List, JSON array, JSON array then JSON object or params ?
bitmap Error which is only happen after 3 or 4 successful uploads
: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
image selection
ActivityResultLauncher<Intent> mgetcontent = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
ClipData clipData = data.getClipData();
if (clipData != null) {
for (int i = 0; i < clipData.getItemCount(); i++) {
Uri imageUri2 = clipData.getItemAt(i).getUri();
int j =0;
bitmap = new Bitmap[i];
while (j < i) {
imageUri2 = data.getClipData().getItemAt(j).getUri();
try {
bitmap[j] = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri2);
} catch (IOException e) {
e.printStackTrace();
}
j++;
}
picsModelClassList.add(new PicsModelClass(
imageUri2.toString()
));
PicsAdapter adapter = new PicsAdapter(picsModelClassList, getApplicationContext());
adapter.notifyDataSetChanged();
pics_recycler.setAdapter(adapter);
}
}else {
Uri uri = data.getData();
picsModelClassList.add(new PicsModelClass(
uri.toString()
));
PicsAdapter adapter = new PicsAdapter(picsModelClassList, getApplicationContext());
adapter.notifyDataSetChanged();
pics_recycler.setAdapter(adapter);
}
}
}});
encode images
public String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
php
$pics_array = $_POST['pics_array'];
$ImagePath = pics/';
file_put_contents($ImagePath.uniqid().'.jpg',base64_decode($pics_array));
Advertisement
Answer
Edit: reread your code, you are compressing to a PNG. So it just leaves one issue
Don’t use base64. It’s binary data, send it as binary data. Sending it as Base64 will always increase it to 2-3x the size. Base64 should only be used where you absolutely have to, its a hack to send binary data over text only channels like URLs.