В настоящее время я отправляю байт [] из моего интерфейса в мой домен и 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;
}
Вот решение. Измени свой 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()
байтов изображения.
Других решений пока нет …