将文件从react-nativeexpo项目上载到php服务器laravel

问题描述

我一直在为这个问题寻找解决方案一周,尝试了很多对我没有用的东西,我正在开发一个基于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.";
}