0

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

是的,它正在工作

4

2 回答 2

1

最简单的解决方案是使用 base64 图像格式。

您可以将选项 bese64 设置为 true:

    let picker = await ImagePicker.launchImageLibraryAsync({ base64:true });

并将值附加到经典 json 对象中并避免 multipar/fomr-data,仅用于 php 解码 base64 图像。

于 2020-09-08T12:52:57.067 回答
0

反应原生

// 状态变量来保存拾取的图像

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.";
}
于 2020-09-08T12:43:29.873 回答