Реагируйте на загрузку собственного изображения в php - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь сохранить изображение, возвращенное из реакции-родного-вида-снимка, которое выглядит примерно так (file: ///data/user/ReactNative-snapshot-image123.png), но я не знаю почемуизображение не сохраняется на моем сервере.Это то, что я сделал.

       savePicture = () =>{
            this.refs.viewShot.capture().then(uri => {
            this.setState(
                {
                imageURI:uri
            });

            var data = new FormData();
            data.append('image', {
              uri: this.state.imageURI,
              name: 'my_photo.png',
              type: 'image/png'
            });
            fetch('http://www.url.com/upload.php', {
                headers: {
                  'Accept': 'application/json',
                  'Content-Type': 'multipart/form-data'
                },
                method: 'POST',
                body: JSON.stringify({
                    image: data
                })
              })
                .then((response) => response.json())
                .then((responseData) => {console.warn(responseData);})
                .catch((error) => {
                    console.warn(error);
                })
                .done();
            });
        }

и вот мой php для сохранения изображения на моем сервере.

<?
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers: *");
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $shuffledid = str_shuffle(124243543534543534);
    $url = $shuffledid;
    $path = $_SERVER['DOCUMENT_ROOT'].'/android';

    $json = json_decode(file_get_contents('php://input'), true);
    $img = $json['image'];
    list($width,$height,$type) = getimagesize($img);
    switch(strtolower(image_type_to_mime_type($type)))
    {
        case 'image/gif':
            $pic = imagecreatefromgif($img);
            break;
        case 'image/png':
            $pic = imagecreatefrompng($img);
            break;
        case 'image/jpeg':
            $pic = imagecreatefromjpeg($img);
            break;
        default:
            return false;
            break;
    }

    $bg = imagecreatetruecolor(600,700);
    imagecopyresampled($bg,$img,0,0,0,0,600,700,$width,$height);
    imagepng($bg, $path.'/'.$url.'.png');
    imagedestroy($img);

    echo "done";
}
?>

Мой PHP просто возвращает эту ошибку:

getimagesize () ожидает, что параметр 1 будет строкой, задан массив

Я пытался с помощью var_dump ($ _ POST), чтобы увидеть, что возвращается, но я получил что-то вроде этого

{line:21352",column:16,sourceUrl:http.../index.delta?platform=android$dev=true...

Ты хоть представляешь, что я не правильно делаю?Я также сделал

body: data

на моем реактиве без json.stringify, но все еще ничего.

Спасибо!

Решено!Если кому-то это нужно

const formData = new FormData();
            formData.append('image', {
              uri: this.state.imageURI,
              name: 'my_photo.png',
              type: 'image/png'
            });
            formData.append('Content-Type', 'image/png');

            fetch('http://www.url.com/upload.php',{
                method: 'POST',
                headers: {
                    'Content-Type': 'multipart/form-data',
                  },
                  body: formData
              })
              .then((response) => response.json())
              .then((responseJson) => {
                 console.log(responseJson);     
                })
                .catch((error) => {
                    console.log(error);
                  });
            });

PHP

$img = $_FILES['image']['tmp_name'];
$shuffledid = str_shuffle(124243543534543534);
$url = $shuffledid;
$path = $_SERVER['DOCUMENT_ROOT'].'/android';
list($width,$height,$type) = getimagesize($img);
$pic = imagecreatefrompng($img);
$bg = imagecreatetruecolor(600,700);
imagecopyresampled($bg,$pic,0,0,0,0,600,700,$width,$height);
imagepng($bg, $path.'/'.$url.'.png');
imagedestroy($pic);
echo json_encode("done");
...