Как я могу получить image_name и image_tmp_name из байта [] в PHP?

В настоящее время я отправляю байт [] из моего интерфейса в мой домен и PHP-код. Массив байтов, который я отправляю, называется «photo» и отправляется как System.Text.Encoding.UTF8, «application / json». Моя цель состоит в том, чтобы вставить byte [] в изображение и затем загрузить его в мою папку домена (которая уже существует). Нужно ли мне получать image_name и image_tmp_name из этого байта [], чтобы сделать это? Я немного не уверен, как именно я должен заставить это работать.

У меня в настоящее время есть этот код:

<?php

$value = json_decode(file_get_contents('php://input'));

if(!empty($value)) {

print_r($value);
}

?>

С этим кодом печать дает мне огромную строку текста, содержащую байт [].

Как мне теперь получить image_name и image_tmp_name из этого байта []? Моя цель — загрузить изображение в мою карту домена (с именем photoFolder, которая уже существует) с кодом, похожим на это:

$image_tmp_name = ""; //I currently do not have this value
$image_name = ""; //I currently do not have this value
if(move_uploaded_file($image_tmp_name, "photoFolder/$image_name")) {

echo "image successfully uploaded";

}

Как я отправляю это:

static public async Task <bool>  createPhotoThree (byte [] imgData)
{
var httpClientRequest = new HttpClient ();

var postData = new Dictionary <string, object> ();

postData.Add ("photo", imgData);

var jsonRequest = JsonConvert.SerializeObject(postData);

HttpContent content = new StringContent(jsonRequest, System.Text.Encoding.UTF8, "application/json");

var result = await httpClientRequest.PostAsync("http://myadress.com/test.php", content);
var resultString = await result.Content.ReadAsStringAsync ();
return  true;

}

0

Решение

Вот решение. Измени свой C# метод как это:

static public async Task<bool> createPhotoThree(string imgName, byte[] imgData) {
var httpClientRequest = new HttpClient();

var postData = new Dictionary<string, object>();

postData.Add("photo_name", imgName);
postData.Add("photo_data", imgData);

var jsonRequest = JsonConvert.SerializeObject(postData);

HttpContent content = new StringContent(jsonRequest, System.Text.Encoding.UTF8, "application/json");

var result = await httpClientRequest.PostAsync("http://myadress.com/test.php", content);
var resultString = await result.Content.ReadAsStringAsync();
return true;
}

и ты php код как это:

$input = file_get_contents('php://input');
$value = json_decode($input, true);
if (!empty($value) && !empty($value['photo_data']) && !empty($value['photo_name'])) {
file_put_contents($value['photo_name'], base64_decode($value['photo_data']));
}

Вы видите, когда вы звоните JsonConvert.SerializeObject(postData) ваш byte[] стал строкой в ​​кодировке base64. И вы отправляете эти данные прямо в тело POST. Так на php сторона вам нужна json_decode() из php://input сначала, а потом base64_decode() байтов изображения.

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector