问题描述
我一直在为这个问题寻找解决方案一周,尝试了很多对我没有用的东西,我正在开发一个基于expo的react-native项目,我正在尝试做的是使用Imagepicker上传图像,我尝试使用axios提交并获取图像,我能够发送文本数据(例如,用户名,电子邮件...),但无法将文件发送到服务器,它无法识别总之,它给我的是[object object],如果有人成功使用PHP完成此操作,请分享您的代码,我确实尝试了使用html表单的后端,并且文件上传没有问题。>
解决方案
let picker = await ImagePicker.launchImageLibraryAsync({ base64: true });
const picker = selectedImage.base64;
这将返回base64编码的图像数据,您所要做的就是将其作为文本字段发送到PHP服务器,对其进行解码并将其放入这样的文件中:
file_put_contents("example.jpg",base64_decode($_POST['image']));
是的,它正在工作
解决方法
最简单的解决方案是使用base64图像格式。
您可以将bese64选项设置为true:
let picker = await ImagePicker.launchImageLibraryAsync({ base64:true });
然后将该值附加到经典的json对象中,避免使用multipar / fomr-data,仅用于php解码base64图像。
,反应原生
//用于保存所拾取图像的状态变量
const [selectedImage,setSelectedImage] = useState(false);
//使用图像选择器选择图片
let openImage = async () => {
let permission = await ImagePicker.requestCameraRollPermissionsAsync();
if (permission.granted == false) {
return;
}
let picker = await ImagePicker.launchImageLibraryAsync();
setSelectedImage(picker);
}
//将图像上传到服务器
const uploadimage = async () => {
const payload = new FormData();
payload.append('image',{
uri: selectedImage.uri,type: selectedImage.type,name: selectedImage.fileName
})
const config = {
body: payload,method: 'POST',headers: {
'Content-Type': 'multipart/form-data'
}
};
let response = await fetch('http://192.168.1.6/php_upload/upload.php',config);
console.log(response);
}
// PHP后端
$target_file = "uploads/" . basename($_FILES["image"]["name"]);
if ( move_uploaded_file($_FILES["photo"]["tmp_name"],$target_file) )
{
echo "The file ". basename( $_FILES["photo"]["name"]). " has been uploaded.";
}
else
{
echo "Sorry,there was an error uploading your file.";
}