Я пытаюсь сохранить изображение, возвращенное из реакции-родного-вида-снимка, которое выглядит примерно так (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");