ver.1サポートサイト

マルチパート形式(PHP)

最終更新日:2021年05月25日

ファイル型フィールドを含むレコードの挿入時などバイナリファイルを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');
?>

内部呼出しを利用する場合

内部呼出しはシングルパート形式のリクエストとなるため利用できません。外部呼出しをご利用ください。