2016-06-28 5 views
0

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

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

<?php 

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

if(!empty($value)) { 

print_r($value); 
} 

?> 

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

Как мне получить имя_источника и image_tmp_name из этого байта []? Моя цель состоит в том, чтобы загрузить изображение на моем domainmap (названный 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; 

} 
+1

Покажите нам, что вы получаете в результате 'print_r ($ value)' _Введите его в свой вопрос, не отправляйте его в качестве комментария_ – RiggsFolly

+0

Также как вы создаете эти данные, которые вы называете массивом 'byte' – RiggsFolly

+0

Я создаю его из мой интерфейс (платформа приложения), который я отправляю в этот домен и код. – medvedo

ответ

1

Вот решение. Измените метод 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[] becames строку в кодировке base64. И вы отправляете эту директиву данных в POST-тело. Таким образом, на стороне php вам необходимо указать json_decode() из php://input, а затем base64_decode() изображений.

+0

imgName должно быть образцом или просто именем изображения? (просто уточнить) – medvedo

+0

Это не имеет большого значения, это зависит от вас. Вы можете отправить imagePath с 'C#', или вы можете решить, где разместить изображение на стороне 'php'. – spirit

+0

Я думаю, что этот код прямо здесь: 'file_put_contents ($ value ['photo_name'], base64_decode ($ value ['photo_data']));' должно быть заменено следующим: 'file_put_contents ($ value-> photo_name , base64_decode ($ value-> photo_data)); 'если я заменил этот код на этот, я могу получить вызов эха внутри, но, возможно, я ошибаюсь? – medvedo

 Смежные вопросы

  • Нет связанных вопросов^_^