Изображение с Android на MySQL Blob

Добрый день всем! Как говорится в заголовке, я пытаюсь загрузить изображение из ImageView в MySQL. Я хочу сохранить его как блоб в MySQL.

Я видел несколько вопросов по этому поводу, но в моем случае ответов не было: я все еще застрял!

Ниже приводится мой XML ImageView:

<ImageView
android:id="@+id/das_photoib"android:layout_width="150dp"android:layout_height="150dp"android:maxWidth = "150dp"android:maxHeight="150dp"android:layout_gravity="center_horizontal"/>

Следующее — моя деятельность JAVA

rootView = inflater.inflate(R.layout.devenirassistant, container, false);
photoprofil = (ImageView) rootView.findViewById(R.id.das_photoib);

В том же упражнении, когда я хочу загрузить изображение, я помещаю его в ContentValues:

ContentValues cv = new ContentValues();
Bitmap bitmap = ((BitmapDrawable)photoprofil.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
cv.put("image", Arrays.toString(b));

Затем я вызываю AsyncTask, который сам вызывает файл php с параметром contentValues.
В php-файле я получаю данные «image» и пытаюсь загрузить их в строку «image» MySQL таблицы «image_personne», которая была определена как «BLOB». Я делаю это так:

    if (isset($_POST['image'])){
$image = imagecreatefromstring(base64_decode($_POST['image']));

$request5 = "INSERT INTO image_personne (id_personne, isDeleted, image, isModere) VALUES ({$_POST['id']}, '0', $image, 0)";

$result5 = mysqli_query($connexion,$request5) or die(mysqli_error($connexion));
}

Там нет ошибок, но это не загружается! Не могли бы вы помочь мне отладить? Спасибо!


Это то, что делается сейчас:

Сторона Android:

ContentValues cv = new ContentValues();
Bitmap bitmap = ((BitmapDrawable)photoprofil.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
cv.put("image", Base64.encode(b,Base64.DEFAULT));

Сторона php:

$request5 = "INSERT INTO image_personne (id_personne, isDeleted, image, isModere) VALUES (?,?,?,?)";

$image = $_POST['image'];
$id = $_POST['id'];
$del = '0';
$mod = '0';
$stmt = $connexion->prepare($request5); //prepare the statements
$stmt->bind_param("isbi", $id, $del, $null, $mod ); //bind parameter
$stmt->send_long_data(0, $image);   //add blob data to statement
$stmt->execute();

0

Решение

Это будет работать, сохранить как byte[] массив не как Array.toString()

ContentValues cv = new ContentValues();
Bitmap bitmap = ((BitmapDrawable)photoprofil.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
cv.put("image", b);
0

Другие решения

Я постараюсь ответить на вашу сторону php. Здесь я предполагаю, $_POST['image'] в качестве файла ввода в base64_encode закодированный формат. Поэтому мы вставим его в формате base64 в базу данных в виде BLOB-объекта. Также буду использовать

  1. Мы получаем данные в формате base64_encod
  2. Сохраните его в базе данных как blob
  3. получить данные и декодировать изображение, созданное из строки

    if (isset($_POST['image']))  {    $request5 = "INSERT INTO image_personne (id_personne, isDeleted, image,sModere)
    VALUES (?, ?, ?,?)";  //statement for db update
    $image = $_POST['image'];     //assign image the received data
    $id = $_POST['id'];   //assign values to variables
    $isdel = '0';
    $ismod = 0;
    $stmt = $connexion->prepare($request5); //prepare the statements
    $stmt->bind_param("isbi", $id, $isdel, $null, $ismod ); //bind parameter
    $stmt->send_long_data(0, $image);   //add blob data to statement
    $stmt->execute();  //execute the statement
    }
    

Обновить:

   Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
byte [] byte_arr = stream.toByteArray();
String image_str = Base64.encodeBytes(byte_arr);

Вы можете попробовать этот метод для преобразования файла изображения в строку.

0

По вопросам рекламы [email protected]