マルチパート形式(PHP)
最終更新日:2023年02月22日
ファイル型フィールドを含むレコードの挿入時などバイナリファイルをAPIで送信する必要がある場合は、マルチパート形式でAPIリクエストを送信してください。
詳しくはファイル型などバイナリデータを含む場合も合わせて参照して下さい。
外部呼出しを利用する場合
<?php
// API接続用パラメータ
define("API_URL", "https://xxx.smp.ne.jp/api/service");
define("API_TOKEN", "00000000KrJb7fe999032bcf729fc85099afcc4a433exxxxxxxx");
define("API_SECRET", "00000000a36b676c133af4ed88622b8bxxxxxxxx");
define("MULTIPART_BOUNDARY", "SPIRAL_API_MULTIPART_BOUNDARY");
define("DATA_NAME", "Test Data");
define("FILE_FIELD", "facefile");
(count($argv) > 1) or die("Usage: php filetype_sample.php <file_path_to_be_uploaded>\n");
// API用のHTTPヘッダ
$api_headers = array(
"X-SPIRAL-API: database/insert/request",
"Content-Type: multipart/form-data; boundary=" . MULTIPART_BOUNDARY,
);
// 送信するJSONデータを作成
$parameters = array();
$parameters["spiral_api_token"] = API_TOKEN; //トークン
$parameters["db_title"] = "filetypesample"; //DBのタイトル
$parameters["passkey"] = time(); //エポック秒
$parameters["data"] = array(array("name" => "name", "value" => DATA_NAME));
// 署名を付けます
$key = $parameters["spiral_api_token"] . "&" . $parameters["passkey"];
$parameters["signature"] = hash_hmac('sha1', $key, API_SECRET, false);
// POSTデータを生成します
$postdata = "--" . MULTIPART_BOUNDARY . "\r\n";
$postdata .= "Content-Type: application/json; charset='UTF-8';\r\n";
$postdata .= "Content-Disposition: form-data; name='json'\r\n\r\n";
$postdata .= json_encode($parameters);
$postdata .= "\r\n\r\n";
$postdata .= "--" . MULTIPART_BOUNDARY . "\r\n";
$postdata .= "Content-Type: application/octet-stream;\r\n";
$postdata .= "Content-Disposition: form-data; name='" . FILE_FIELD . "'; filename='" . $argv[1] . "'\r\n\r\n";
$postdata .= file_get_contents($argv[1]);
$postdata .= "\r\n\r\n";
$postdata .= "--" . MULTIPART_BOUNDARY . "--\r\n";
// curlライブラリを使って送信します。
$curl = curl_init(API_URL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_HTTPHEADER, $api_headers);
curl_exec($curl);
$response = curl_multi_getcontent($curl);
curl_close($curl);
// 結果を表示
echo mb_convert_encoding(print_r(json_decode($response, true), true), 'CP932', 'UTF-8');
?>
内部呼出しを利用する場合
内部呼出しはシングルパート形式のリクエストとなるため利用できません。外部呼出しをご利用ください。