반응형
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] ];
}
?>
반응형