【问题标题】:How to Create PHP rest api for uploading files from any device?如何创建 PHP rest api 以从任何设备上传文件?
【发布时间】:2021-03-18 05:00:25
【问题描述】:

我正在创建一个 API 来注册用户。我可以成功注册,但图片没有上传。 我在谷歌上进行了一些搜索,并获得了一些关于 file_put_contet() 的信息,但不知道实现它的正确方法

 <?php

header('Content-Type: application/json');
header('Acess-Control-Allow-Origin: *');
header('Acess-Control-Allow-Methods: POST');
header('Acess-Control-Allow-Headers: Access-Control-Allow-Headers,Content-Type,Access-Control-Allow-Methods, Authorization');

$data=json_decode(file_get_contents("php://input"),true);

    $p_name=$data['p_name'];
    $gaurdian=$data['gaurdian'];
    $document=$data['document'];
    $card_no=$data['card_no'];
    $state=$data['state'];
    $district=$data['district'];
    $village=$data['village'];
    $pin=$data['pin'];
    $phone=$data['phone'];
    $email=$data['email'];
    $gender=$data['gender'];
    $t_name=$data['team_name'];

    $passport_photo = $_FILES['photo1']['name'];
    $temp_name1=$_FILES['photo1']['tmp_name'];
    $size1=$_FILES['photo1']['size'];
    $type1=$_FILES['photo1']['type'];

    $file_ext=strtolower(end(explode('.',$passport_photo)));
    $ext=array("jpeg","jpg","png");

    if(in_array($file_ext,$ext) === false){
        echo'<script>alert("This file type is not allowed, please choose a jpg or png")</script>';
    }

    if($size1 > 50000){
        echo'<script>alert("File size must be 150kb")</script>';
        die();
    }

    $path = "images/passport_photo/".$passport_photo;


    $card_photo=$_FILES['photo2']['name'];
    $temp_name2=$_FILES['photo2']['tmp_name'];
    $size2=$_FILES['photo2']['size'];
    $type2=$_FILES['photo2']['type'];

    $file_ext1=strtolower(end(explode('.',$card_photo)));
    $ext1=array("jpeg","jpg","png","pdf");

    if(in_array($file_ext1,$ext1) === false){
        echo'<script>alert("This file type is not allowed, please choose a jpg, png or pdf file.")</script>';
        die();
    }

    if($size2 > 150000){
        echo'<script>alert("File size must be 150kb")</script>';
        die();
    }

    $path1 = "images/document_photo/".$card_photo;

        if(move_uploaded_file($temp_name1,$path) && move_uploaded_file($temp_name2,$path1)){

            echo $query="INSERT INTO `player_reg` (`age_category`, `player_name`, `gaurdian_name`, `doc_type`, `card_no`, `state`, `district`, `town`,`pincode`, `image`, `doc_img`, `phone`, `email`, `gender`, `sport`, `team_name`,`date`) VALUES ('{$_SESSION["age_cat"]}','{$p_name}','{$gaurdian}','{$document}','{$card_no}','{$state}','{$district}','{$village}','{$pin}','{$passport_photo}','{$card_photo}','{$phone}','{$email}','{$gender}','{$_SESSION ['sport_type']}','{$t_name}','{$date}')";
            $output=mysqli_query($con,$query);

            if($output){
            
            redirect("team-reg.php");
        }
    }


    $query="INSERT INTO `player_reg` (`age_category`, `player_name`, `gaurdian_name`, `doc_type`, `card_no`, `state`, `district`, `town`,`pincode`, `image`, `doc_img`, `phone`, `email`, `gender`, `sport`, `team_name`,`date`) VALUES ('{$_SESSION["age_cat"]}','{$p_name}','{$gaurdian}','{$document}','{$card_no}','{$state}','{$district}','{$village}','{$pin}','{$passport_photo}','{$card_photo}','{$phone}','{$email}','{$gender}','{$_SESSION ['sport_type']}','{$t_name}','{$date}')";
                $output=mysqli_query($con,$query);

                if($output){
                
                    echo json_encode(array('message' => 'User registered successfully!','status' => true));
            }

?>

用户注册成功,但图片没有上传到服务器。

【问题讨论】:

    标签: php api file-upload server rest


    【解决方案1】:

    要使用API​​上传图片,最合适的方法是在Json请求中传递base64编码的图片数据,然后使用file_put_contents()将base64编码的字符串解码成文件。

    $img_info = explode(',',$data['photo']);
    
    $image_content = base64_decode($img_info[1]);
    
    $img_extension = substr($img_info[0], 11, 3);
    
    $img_filename = "images/passport_photo/some_random_text".$img_extension;
    
    file_put_contents($img_filename, $image_content);
    //apply your filters of size, extensions before uploading the image
    

    但是 base64 不是上传大尺寸图片的好主意。 首先上传图片,然后在json请求中传递图片URL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 2013-04-30
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2021-06-24
      相关资源
      最近更新 更多