Невозможно вставить изображение в базу данных SQL Server с Android с помощью PHP
Уже много дней я пытаюсь вставить данные сканирования биометрических отпечатков пальцев в базу данных MS SQL Server с помощью Android через PHP.
На этот раз я делюсь всем своим кодом, так или иначе, я должен его завершить. Пожалуйста, друзья, помогите мне решить эту проблему.
Код Android для вызова Api:
public void registerFinger(Bitmap scannedImage) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
scannedImage.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] fingerByte = byteArrayOutputStream.toByteArray();
String encodedFingerData = Base64.encodeToString(fingerByte, Base64.DEFAULT);
try {
h = new JSONObject();
h.put("FingerPrint", encodedFingerData);
} catch (Exception e) {
e.printStackTrace();
}
Call<UniversalPojo> call = apiInterfaces.registerFingerPrint(String.valueOf(empId), getRequestBody(h.toString()));
call.enqueue(new Callback<UniversalPojo>() {
@Override
public void onResponse(Call<UniversalPojo> call, Response<UniversalPojo> response) {
if (response.isSuccessful()) {
if (response.body().getStatus().equalsIgnoreCase("true")) {
showDialog("Registration Done.");
} else {
showDialog("Registration Failed.");
}
} else {
showDialog("Registration Failed.");
}
}
@Override
public void onFailure(Call<UniversalPojo> call, Throwable t) {
t.printStackTrace();
showDialog("Registration Failed.");
}
});
}
public RequestBody getRequestBody(String rawString) {
return RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), rawString.toString());
}
RegisterFingerData.php
<?php
require_once 'db_functions.php';
$db = new db_functions();
$data = json_decode(file_get_contents('php://input'), true);
$FingerPrint = $data['FingerPrint'];
//decoding and converting the image into byte array
$a = base64_decode($FingerData);
$b = array();
foreach (str_split($a) as $c) {
$b[] = sprintf("%08b", ord($c));
}
$ifAlreadyExists = $db->registerFinger( $b );
?>
Столбец FingerData в EMPFINGERMASTER имеет тип данных varbinary(MAX).
функция registerFinger
public function registerFinger($fingerPrint)
{
try {
$sqlString = "INSERT INTO EMPFINGERMASTER( FingerData ) values (?)";
$stmt = $this->conn->prepare($sqlString);
$params = array($fingerPrint);
$stmt->execute($params);
$row = $stmt->fetch();
if (!$stmt) {
$arr = $stmt->errorInfo();
print_r($arr);
}
if ($rows) {
echo true;
} else {
echo false;
}
} catch (Exception $e) {
echo 'Message: ' . $e->getMessage();
}
}
Функция GetFingerPrintData()
public function GetFingerPrintData($myId){
$sqlString = "SELECT FingerData from EMPFINGERMASTER WHERE MyId = 1";
$stmt = $this->conn->prepare($sqlString);
$params = array($myId);
$stmt->execute($params);
$row = $stmt->fetch();
if (!$stmt) {
$arr = $stmt->errorInfo();
print_r($arr);
}
if ($row) {
//reconverting the byte[] array to BASE64 String
$rawResult = $row['FingerData'];
$resim = substr($rawResult, 2);
$bin = hex2bin($rawResult);
$base64_image = base64_encode($bin);
echo $base64_image;
}
}
Данные, хранящиеся в базе данных, выглядят примерно так: [B@623a5f2
но если я проверяю в echo, он показывает большие данные, прежде чем конвертировать их в byte[] в RegisterFingerData.php
И я не смогу получить правильные данные во время поиска.
У меня вопрос, я хочу сохранить данные в БД и получить их для проверки. Есть много предложений по другим подобным вопросам, но после их использования я достиг окончательного кода и все еще не могу получить результаты.