Android — Как получить многокомпонентный запрос в переполнении стека

У нас есть API, который получает изображения, конвертированные в строку base64. Наше мобильное приложение потребляет слишком много оперативной памяти в процессе конвертации (в base64), теперь нам нужно загрузить изображение как составное. Я разработал мобильную часть, но я застрял с PHP API. Мы перешли с залпа на модификацию, потому что залп не поддерживал многочастную загрузку.

Что мне нужно изменить в скрипте, который получает многокомпонентную загрузку изображений?

<?php

//header('Content-Type : bitmap; charset=utf-8');
//header('Content-Type: application/json');

if (isset($_POST["encoded_string"])) {

//encoded_string -> base64 string sent from mobile phone

$encoded_string = $_POST["encoded_string"];
$image_name     = $_POST["image_name"];

$decoded_string = base64_decode($encoded_string);

$path = 'images/' . $image_name;

if (!file_exists('images')) {
mkdir('images', 0777, true);
}

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

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

if ($is_written > 0) {

$connection = mysqli_connect('localhost', 'root', '', 'test');

if ($connection) {

$query = "INSERT INTO photos(name,path) values('$image_name','$path');";

$result = mysqli_query($connection, $query);

if ($result) {
echo json_encode(array(
"response" => "Success! Image is succefully uploaded!.",
"result" => "success"));
} else {
echo json_encode(array(
"response" => "Error! Image is not uploaded.",
"result" => "error"));
}
mysqli_close($connection);
} else {
echo json_encode(array(
"response" => "Error! No database connection!",
"result" => "error"));
}
}
} else {
echo json_encode(array(
"response" => "Error! Please insert data!",
"result" => "error"));
}
?>

2

Решение

Посмотри на move_uploaded_file() Функция PHP и тому $_FILES массив.

Пример кода много на этом сайте.

0

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

Если вы хотите добавить многокомпонентную загрузку в бэкэнд, вы должны внести следующие изменения:

<?php

//header('Content-Type : bitmap; charset=utf-8');
//header('Content-Type: application/json');if (isset($_POST["encoded_string"])) {//encoded_string -> base64 string sent from mobile phone
if (!file_exists('images')) {
mkdir('images', 0777, true);
}

$connection = mysqli_connect('localhost', 'root', '', 'test');

if (!$connection) {
echo json_encode(array(
"response" => "Error! No database connection!",
"result" => "error"));
die;
}

$responses = array();

foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$image_name = $_FILES["pictures"]["name"][$key];
$path = 'images/' . $image_name;
if (move_uploaded_file($tmp_name, path)) {
$query = "INSERT INTO photos(name,path) values('$image_name','$path');";
$result = mysqli_query($connection, $query);
if ($result) {
$responses[] = array(
"response" => "Success! Image is succefully uploaded!.",
"result" => "success");
} else {
$responses[] = array(
"response" => "Error! Image is not uploaded.",
"result" => "error");
}
}
} else {
$responses[] = array(
"response" => "Error! Please insert data!",
"result" => "error");
}
}
mysqli_close($connection);
echo json_encode(array(
'responses' => $responses
));
}

Кроме того, сделайте так, чтобы вы использовали пост-запрос с многочастным форматом (он должен иметь заголовок Content-Type: multipart / form-data и bi в правильном формате — https://ru.wikipedia.org/wiki/Multipart/form-data). Надеюсь, это поможет вам.

0

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