본문 바로가기

프로그래밍

react-native에서 네이버 클라우드펑션의 php로 업로드할때

반응형

let formData = new FormData();
formData.append('name', '이름);
formData.append('phone', '123-123-123);
formData.append('photo[]', { uri: '이미지주소', name: '파일명', 'image/jpeg' });

try {
  let response = await fetch("네이버 클라우드펑션/json", {
  method: 'POST',
  body: formData,
  headers: {
 	 'content-type': 'multipart/form-data',
  },
});
  let responseJson = await response.json();
  console.log(responseJson);

} catch (error) {
	Alert.alert(error);
}

 

형태로 값을 보냈을때 클라우드펑션의 php에서는 아래와 http raw data형태로 값이 전달되기 때문에
파싱후 사용해야 한다.

아래는.. 그 파싱 예제이다. 

<?php
 function main(array $args) : array
{
   header("Content-Type: application/json"); 
       
       $body = $args['__ow_body'];
    
       $raw_data = base64_decode($body);
        
$boundary = substr($raw_data, 0, strpos($raw_data, "\r\n"));

// Fetch each part
$parts = array_slice(explode($boundary, $raw_data), 1);
$data = array();

foreach ($parts as $part) {
    // If this is the last part, break
    if ($part == "--\r\n") break; 

    // Separate content from headers
    $part = ltrim($part, "\r\n");
    list($raw_headers, $body) = explode("\r\n\r\n", $part, 2);

    // Parse the headers list
    $raw_headers = explode("\r\n", $raw_headers);
    $headers = array();
    foreach ($raw_headers as $header) {
        list($name, $value) = explode(':', $header);
        $headers[strtolower($name)] = ltrim($value, ' '); 
    } 

    // Parse the Content-Disposition to get the field name, etc.
    if (isset($headers['content-disposition'])) {
        $filename = null;
        preg_match(
            '/^(.+); *name="([^"]+)"(; *filename="([^"]+)")?/', 
            $headers['content-disposition'], 
            $matches
        );
        list(, $type, $name) = $matches;
        isset($matches[4]) and $filename = $matches[4]; 

        // handle your fields here
        switch ($name) {
            // this is a file upload
            case 'userfile':
                 file_put_contents($filename, $body);
                 break;

            // default for all other files is to populate $data
            default: 
                 $data[$name] = substr($body, 0, strlen($body) - 2);
                 break;
        } 
    }

}


    $a = var_export($data);  
        
      return ["vars" => $data[name]  , "vars1"=>$data[phone]  ]; 
    


}
 
 
?>​
반응형