Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件从react native(expo)项目上载到php服务器(laravel)_Php_Laravel_React Native_Expo_Imagepicker - Fatal编程技术网

将文件从react native(expo)项目上载到php服务器(laravel)

将文件从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编码的图像数据,您只需将

我已经为这个问题寻找了一周的解决方案,尝试了很多对我来说不起作用的东西,我正在与react native合作一个基于expo的项目,我正在尝试使用Imagepicker上传图像,我尝试使用axios提交图像并获取,我能够发送文本数据,如(用户名、电子邮件…)但是无法将文件发送到服务器,它无法识别它,它给我的只是[object object],如果有人用php成功地做到了这一点,请分享你的代码,我使用html表单尝试了后端,上传的文件没有问题

解决方案 这将返回base64编码的图像数据,您只需将其作为文本字段发送到php服务器,对其进行解码并将其放入如下文件中:

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 });