Upload file to server hosting by PHP. Encode file to Base 64 extension

Hello all,
Since the new version of Android, the encode of Base64 doesn't work anymore.
I do not succeed to get a string anymore whereas it worked very well.
Can you help me ?
Vincent

I have modified the code, you can check if the new extension works: KIO4_Base64v10.aix, :

Edit:

  • If you are going to use this extension in Android 10 or higher, you must use the blocks that contain "ASD", the BASE directory is:

/storage/emulated/0/Android/data/'namepackage'/files

that is, if in the CreateDirectoryASD block you write: /my_directory, it will be created in:
/storage/emulated/0/Android/data/'namepackage'/files/my_directory

  • If you are going to use this extension in Android 9 or lower, you can use the blocks that contain "ASD" as I have indicated above, you can also use the blocks that do not contain "ASD", in this case the BASE directory is:

/mnt/sdcard

that is, if in the CreateDirectory block you write: /my_directory, it will be created in:
/mnt/sdcard/my_directory

  • This extension also contains the GetApi and GetSdkCodeName blocks, with these blocks you can check the version of Android that the device has installed.

http://kio4.com/appinventor/277_extension_imagen_string.htm

2 Likes

Tested in companion on Android 10 (genymotion emulator) and Android 11 (real device Google Pixel 4a)

This works OK

image

For a file in the assets / media folder, this works OK

image

Thank you Juan for your good work :slight_smile:

I note the extension for 10+ doesn't overwrite the earlier extension. Can both extensions be used at the same time, to handle different android versions ?

Hi @TIMAI2, thanks for testing the extension, I have taken your idea and joined the two versions of this extension, I have edited the previous post.

Good stuff. Thank you Juan :smiley:

Hi Juan

Using the extension today to encode an image from assets (on Android 10). This works:

image

but the tooltip says to use two slashes // - which doesn't work.

Which one is correct ?

Yes, only for Android < 10.
@Juan_Antonio

Does this app installed on Android 10 and 11 work?

borrar_test_base64.aia (79.3 KB)

[edited: //perro.png by perro.png]

Do we need to compile ?

yes, installed in Android 10 or 11.

Tested apk Android 10 and 11. Works OK. (Couldn't see if the directory intoASD was created in Android 11 due to Google lockdown, but created in Android 10, but no errors).

I guess we just need an if else block if we are working in development mode to access assets, in the MIT companion directory.

Thanks @TIMAI2 for testing it on Android10-11.

With double slash //gato.png works in development mode and installed.

- Image in asset to Base 64 and upload to web.

p327C_subir_archivo_imagen_Base64_ASD.aia (1.7 MB)

  • This example:

  • Converts an asset image to a Base 64 string, with block "FileToStringASD"

  • Show that string in a Label.

  • Convert that string to an image called: "/this_is_a_cat.png", save it in ASD, and show it in Image2

  • With block "PostText", sends string to web.

  • A PHP file converts that string to image: dibujo.png in web server.

  • You can look that image in a web page.
    (This web page always shows the image in a size of 40x40)

PHP code:

<?php
// Juan A. Villalpando
// kio4.com

$datos=$_POST;
$contenido=$datos['contenido'];

$plainText = base64_decode(str_replace(array('-', '_',' ','\n'), array('+', '/','+',' '), $contenido));
$ifp = fopen( "dibujo.png", "wb" );
fwrite( $ifp,  $plainText );
fclose( $ifp );

echo "Creo que ha subido";
?>

- PICK Image and convert to Base 64, upload to web. PHP.

p327C_subir_archivo_imagen_Base64_ASD_PICK.aia (1.7 MB)

  • We can explorer and PICK an image file with ActivityStarter:
    ActivityStarter1.Action = android.intent.action.PICK
    ActivityStarter1.DataType = image/*
  • We get ResultUri, example:
    content://com.mi.android.globalFileexplorer.myprovider/external_files/gato.png
  • Using the UriToPath block, we convert that uri to the path of the file:
    /storage/emulated/0/gato.png
  • We remove the base of that address to obtain /gato.png
  • That file to string: FileToString block.
  • That string to file in ASD: StringToFileASD.
  • With PostText upload string to web.
  • PHP file receives the string and converts it to the file dibujo.png
  • Show that image in a web page.

- PICK Image. Copy in ASD. Convert to Base 64. Upload to web. PHP.

  • Can anyone check if this app works installed on Android 11? Thanks.
    (use images smaller than 500 kB)

p327C_subir_archivo_imagen_Base64_ASD_PICK_CopyASD.aia (1.7 MB)

  • This app:

  • PICK an image. Convert Uri to Path.

  • Copy image to ASD with name: /image_in_ASD.png

  • Convert image ASD to string Base 64.

  • Upload string to webserver with PHP by Web component.

  • Show image in a web page in my hosting.

Hi Juan

Tested compiled on Android 11.

Picks image OK.

Doesn't show image2
Doesn't show web image

Thanks @TIMAI2

- Download a video file to the ASD, convert it to a Base 64 string, and then convert the string to a new video file.

p327_extensionbase64_bajarvideo.aia (22.4 KB)

  • On this website we can see samples of video files:
    https://filesamples.com/formats/mp4

  • Let's download the file: sample_960x400_ocean_with_audio.mp4 (16,7 MB)

  • We are going to follow this process:

1.- We download the video file to the ASD.
2.- We obtain the absolute address and put it in the source of the VideoPlayer.
3.- Start VideoPlayer.
4.- Convert file to string Base 64.
5.- Show first 100 chars.
6. Convert string Base 64 to file sample_mirror.mp4
7.- Start VideoPlayer with sample_mirror.mp4

Hello Juan,
I meet a problem to get the good path to find the file.
The code under used to work previously but it seems that with the ASD the path changed.
Can you please advise me.
Thanks.

Try with App Inventor.
Does the example in the previous post work for you?
What version of Android are you using?