Загрузка изображения с android на сервер с использованием php

82
9

Я пытаюсь сохранить изображения, взятые из Android Studio (из галереи пользователя), и записать кодированное в base64 изображение в строку, используя php для хранения на веб-сервере.

Я смотрю на многочисленные учебники, которые затрагивают это по-разному. Я решил следить за тем, что было сделано с помощью функции fopen(), но оно продолжало давать мне ошибку "без файла или каталога".

Впоследствии я попытался написать полный путь к каталогу изображений, в котором я сохраню изображения. Ошибка была изменена на сообщение об ошибке i, определенное в части "else" кода, которая:

{"error": true, "error_msg": "Неизвестная ошибка при создании предложения. Повторите попытку."}

Здесь полный код:

class create_offer_form {

private $conn;

// constructor
function __construct() {
require_once 'android_login_connect.php';
// connecting to database
$db = new android_login_connect();
$this->conn = $db->connect();
}

public function StoreOfferInfo($offerMname, $offerUname, $offerTitle, $offerText, $offerBranch, $offerDateTime, $offerMinPrice, $offerMaxPrice, $offerCategory, $offerImageURL) {

$image_name = time()."_".rand().".jpeg" ;

$decoded_string = base64_decode($offerImageURL);

$path = 'AndroidUploadedImages/'.$image_name;

$file = fopen($path, 'wb');

$is_written = fwrite($file, $decoded_string);
fclose($file);

if($is_written > 0) {

$stmt = $this->conn->prepare("INSERT INTO Image(Image) VALUES(?)");
$stmt->bind_param("s", $path);
$result = $stmt->execute();
$stmt->close();

if($result){
echo "success";
}else{
echo "failed";
}

}

$stmt = $this->conn->prepare("INSERT INTO Offer(Offer_title, Offer_memberName, Offer_branch, Offer_text, Offer_image, Offer_DateTime, Offer_minPrice, Offer_maxPrice, Offer_category, Offer_Username) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssssssss", $offerTitle, $offerMname, $offerBranch, $offerText, $offerImageURL, $offerDateTime, $offerMinPrice, $offerMaxPrice, $offerCategory, $offerUname);
$result = $stmt->execute();
$stmt->close();

// check for successful store
if ($result) {
$stmt = $this->conn->prepare("SELECT Offer_title, Offer_memberName, Offer_branch, Offer_text, Offer_image, Offer_DateTime, Offer_minPrice, Offer_maxPrice, Offer_category, Offer_Username FROM Offer WHERE Offer_title = ?");
$stmt->bind_param("s", $offerTitle);
$stmt->execute();
$stmt-> bind_result($token1, $token2,$token3,$token4,$token5,$token6, $token7, $token8, $token9, $token10);

while ( $stmt-> fetch() ) {
$offer["offerMname"] = $offerMname;
$offer["offerUname"] = $offerUname;
$offer["offerTitle"] = $offerTitle;
$offer["offerText"] = $offerText;
$offer["offerBranch"] = $offerBranch;
$offer["offerDateTime"] = $offerDateTime;
$offer["offerMinPrice"] = $offerMinPrice;
$offer["offerMaxPrice"] = $offerMaxPrice;
$offer["offerCategory"] = $offerCategory;
$offer["offerImageURL"] = $offerImageURL;
}
$stmt->close();
return $offer;
} else {
return false;
}
}

Это LOC, в котором первая ошибка, сообщаемая по ошибке:

        $file = fopen($path, 'wb');

$is_written = fwrite($file, $decoded_string);
fclose($file);

Изображение в Android Studio прекрасно отображается в ImageView, и оно также успешно кодируется с использованием base64. Способ, которым я знаю ошибку, - это php, потому что я попытался отправить запрос с помощью Postman, и эти ошибки появились.

Заранее спасибо!

спросил(а) 2018-05-06T21:33:00+03:00 2 года, 5 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема