1. Are you ready for the Galaxy S20? Here is everything we know so far!

Android Retrofit: Unable to upload image to server. Uploads 0 kb image when using file_put_contents

Discussion in 'Android Development' started by AKA001, Jul 19, 2020.

  1. AKA001

    AKA001 Newbie
    Thread Starter


    I am trying to use retrofit to upload an image from the android device to mysql database and server. Below is the java code that I am using for uploading the image:


    private void uploadImage() {

    Bitmap fullSizeBitmap = BitmapFactory.decodeFile(pathToFile);

    Bitmap reducedBitmap = ImageResizer.reduceBitmapSize(fullSizeBitmap,240000);

    File reducedFile = getBitmapfile(reducedBitmap);

    MultipartBody.Part parts = null;

    Retrofit retrofit = NetworkClient.getRetrofit();

    UploadAPIs uploadAPIs = retrofit.create(UploadAPIs.class);

    RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), reducedFile);

    parts = MultipartBody.Part.createFormData("newimage", reducedFile.getName(),requestBody);

    // RequestBody someData = RequestBody.create(MediaType.parse("text/plain"),"This is a new image");

    Call call = uploadAPIs.uploadImage(parts);

    call.enqueue(new Callback() {


    public void onResponse(Call call, retrofit2.Response response) {

    Toast.makeText(Bottom_up.this, "uploaded image", Toast.LENGTH_SHORT).show();



    public void onFailure(Call call, Throwable t) {

    Toast.makeText(Bottom_up.this, "upload image error", Toast.LENGTH_SHORT).show();




    //image upload to server and reduce size

    private File getBitmapfile(Bitmap reducedBitmap) {

    File file = new File(Environment.getExternalStorageDirectory() + File.separator + "reduced_file");


    ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();


    byte[] imgbytes=byteArrayOutputStream.toByteArray();

    try {


    FileOutputStream fos = new FileOutputStream(file);




    return file;

    } catch (Exception e) {



    return file;



    The pathtofile in the above function is coming from the below:


    private void dispatchPictureTakenAction() {

    Intent takePic = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    if (takePic.resolveActivity(getPackageManager())!=null) {

    photoFile = createPhotoFile();

    if (photoFile != null) {

    //path to file in below variable

    pathToFile = photoFile.getAbsolutePath();

    Uri photoURI = FileProvider.getUriForFile(Bottom_up.this,"com.android.cameraandroid.fileprovider",photoFile);


    startActivityForResult(takePic, 1);




    private File createPhotoFile() {

    String name = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

    File storageDir = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

    File image =null;

    try {

    image = File.createTempFile(name,".jpg", storageDir);

    } catch (IOException e) {

    Log.d("myLog","Exception: " + e.toString());


    return image;



    Below is the api client code:


    public class NetworkClient {

    private static Retrofit retrofit;

    private static String BASE_URL = "";

    public static Retrofit getRetrofit() {

    OkHttpClient okHttpClient = new OkHttpClient.Builder().build();

    if (retrofit == null) {

    retrofit = new Retrofit.Builder().baseUrl(BASE_URL).





    return retrofit;




    Below is the API interface code (insert is the server side PHP script):


    public interface UploadAPIs {


    @Post ("insert")

    Call<RequestBody> uploadImage(@part MultipartBody.Part reducedFile);



    Now, in the PHP script I have tried the following:

    1. Use file_put_contents (it uploads a blank image i.e. 0 kb image on the server):


    $image = $_POST["newimage"];

    $sql ="SELECT id FROM [table] ORDER BY id ASC";

    $res = mysqli_query($connect,$sql);

    $id = 0;

    while($row = mysqli_fetch_array($res)){

    $id = $row['id'];


    $upload_paths = "Photo/$id.jpg";



    2. Use move_uploaded_file (it throws an error for undefined index for newimage and errors the upload. It seems like the key value for newimage is not being sent to the php script):


    $image = $_FILES["newimage"];

    if (move_uploaded_file($image, $upload_paths))


    echo “Successfully uploaded $image.";




    echo "Error uploading THIS $image.";



    Can anyone please let me know what I could be missing or doing incorrect in the above code?

    Appreciate your help in advance.


Share This Page