Загрузка изображения с Android на PHP заканчивается нулевыми байтами - PullRequest
0 голосов
/ 29 ноября 2018

Я пытался загрузить данные с Android на сервер PHP, файл был успешно загружен, только файл стал нулевым байтом.
Я не знаю, что не так, вы можете мне помочь?

<?php

include 'config.php';

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

if($_SERVER['REQUEST_METHOD'] == 'POST') {
  $DefaultId = 0;
  $ImageData = $_POST['image_data'];
  $ImageName = $_POST['image_tag'];
  $ImagePath = "upload/$ImageName.jpg";
  $ServerURL = "http://192.168.18.125/$ImagePath";
  $InsertSQL = "INSERT INTO imageupload (image_path,image_name) 
  values('$ServerURL','$ImageName')";

  if(mysqli_query($conn, $InsertSQL)) {
    $decodedImage = base64_decode($ImageData);
    file_put_contents($ImagePath,$decodedImage);
    echo "Your Image Has Been Uploaded.";
  }

  mysqli_close($conn);
} else {
  echo "Please Try Again";
}
?>

Это мой код Android, я загружаю изображение с помощью асинхронной задачи.
Я не знаю, что не так в моем коде.

public void UploadImageToServer() {
  FixBitmap.compress(Bitmap.CompressFormat.JPEG, 40, byteArrayOutputStream);   
  byteArray = byteArrayOutputStream.toByteArray();
  ConvertImage = Base64.encodeToString(byteArray, Base64.DEFAULT);

  class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> {
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
      progressDialog = ProgressDialog.show(MainActivity.this,"Image is Uploading","Please Wait",false,false);
    }

    @Override
    protected void onPostExecute(String string1) {
      super.onPostExecute(string1);
      progressDialog.dismiss();        
      Toast.makeText(MainActivity.this,string1,Toast.LENGTH_LONG).show();
    }

    @Override
    protected String doInBackground(Void... params) {    
      ImageProcessClass imageProcessClass = new ImageProcessClass();
      HashMap<String,String> HashMapParams = new HashMap<String,String>();
      HashMapParams.put(ImageTag, GetImageNameFromEditText);
      HashMapParams.put(ImageName, ConvertImage);    
      String FinalData = imageProcessClass.ImageHttpRequest("http://192.168.18.175/Android%20Upload%20Image/upload-image-to-server.php", HashMapParams);
      return FinalData;
    }
  }

  AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass();
  AsyncTaskUploadClassOBJ.execute();
}

1 Ответ

0 голосов
/ 29 ноября 2018

Попробуйте повторить строку base64 .. если она идет правильно ... попробуйте создать изображение на сервере, используя следующий код.

 // open the output file for writing
    $output_file="local path to create file";
    $ifp = fopen( $output_file, 'wb' ); 

    // split the string on commas
    // $data[ 0 ] == "data:image/png;base64"
    // $data[ 1 ] == <actual base64 string>
    $data = explode( ',', $base64_string );

    // print data here to check base64 format ..then $data[0] or $data[1] in next line

    fwrite( $ifp, base64_decode( $data[ 0 ] ) );

    // clean up the file resource
    fclose( $ifp ); 
...