将文件从react native(expo)项目上载到php服务器(laravel)
我已经为这个问题寻找了一周的解决方案,尝试了很多对我来说不起作用的东西,我正在与react native合作一个基于expo的项目,我正在尝试使用Imagepicker上传图像,我尝试使用axios提交图像并获取,我能够发送文本数据,如(用户名、电子邮件…)但是无法将文件发送到服务器,它无法识别它,它给我的只是[object object],如果有人用php成功地做到了这一点,请分享你的代码,我使用html表单尝试了后端,上传的文件没有问题 解决方案 这将返回base64编码的图像数据,您只需将其作为文本字段发送到php服务器,对其进行解码并将其放入如下文件中:将文件从react native(expo)项目上载到php服务器(laravel),php,laravel,react-native,expo,imagepicker,Php,Laravel,React Native,Expo,Imagepicker,我已经为这个问题寻找了一周的解决方案,尝试了很多对我来说不起作用的东西,我正在与react native合作一个基于expo的项目,我正在尝试使用Imagepicker上传图像,我尝试使用axios提交图像并获取,我能够发送文本数据,如(用户名、电子邮件…)但是无法将文件发送到服务器,它无法识别它,它给我的只是[object object],如果有人用php成功地做到了这一点,请分享你的代码,我使用html表单尝试了后端,上传的文件没有问题 解决方案 这将返回base64编码的图像数据,您只需将
file_put_contents("example.jpg", base64_decode($_POST['image']));
是的,它起作用了
//状态变量以保存拾取的图像
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.";
}
最简单的解决方案是使用base64图像格式 您可以在选项bese64中设置为true:
let picker = await ImagePicker.launchImageLibraryAsync({ base64:true });
并将值附加到经典json对象中,避免使用multipar/fomr数据,仅用于php解码base64图像。共享零食或代码
let picker = await ImagePicker.launchImageLibraryAsync({ base64:true });