ファイル(トークン作成/アップロード/ダウンロード)
cURLライブラリを使用して、ファイルトークン作成、ファイルアップロード、ファイルダウンロードをするサンプルプログラムです。
PHPにcurlライブラリが組み込まれている必要があります。
※本サンプルプログラムはスパイラル以外のサーバ内に設置することを想定しております。
スパイラル内で使用できない関数などが含まれる場合がありますので、ご注意ください。
PHPの各バージョンで使用できない関数はこちらをご参照ください。
・PHP7.4で使用できない関数・PHPクラス・パラメータ等一覧
・PHP8.1で使用できない関数・PHPクラス・パラメータ等一覧
ファイルアップロードトークン作成
<?php
//SPIRAL Ver2のAPI用のURL
$base_url = "https://api.spiral-platform.com/v1/apps";
$url = $base_url."/{app}/dbs/{db}/{field}/files/uploadToken";
//APIキー
$apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
//ヘッダ
$header = array(
"Authorization:Bearer ".$apikey,
"Content-Type:application/json","X-Spiral-App-Authority"."manage",
);
//ボディ
$body = [
];
//配列をjson形式に変換
$json_body = json_encode($body);
// curlライブラリを使用して送信
//セッションを初期化する
$curl = curl_init();
//実行結果を文字列で取得できるように設定
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//urlを指定
curl_setopt($curl, CURLOPT_URL , $url);
//ヘッダを指定
curl_setopt($curl, CURLOPT_HTTPHEADER , $header);
//ボディを指定
curl_setopt($curl, CURLOPT_POSTFIELDS , $json_body);
//メソッドを指定
curl_setopt($curl, CURLOPT_CUSTOMREQUEST , 'POST');
//セッションを実行し、その結果を取得
$response = curl_exec($curl);
//cURLのエラーメッセージを表示
if (curl_errno($curl)) echo curl_error($curl);
//セッションを閉じる
curl_close($curl);
//json形式を配列に変換してアップロードトークンを取得
$arrres = json_decode($response , true);
$filetoken = $arrres["fileUploadToken"];
?>
ファイルアップロード
※レコード登録時に、アップロード後に取得できるファイルキーをレコードに関連づけることで、レコードにファイルが紐づいて登録されます。
<?php
//ファイル情報取得
$filepath = "xxxx";
$filedata =file_get_contents($filepath);
$filetype = mime_content_type($filepath);
$filename = pathinfo($filepath, PATHINFO_BASENAME);$url = $base_url."/{app}/dbs/{db}/{field}/files";
$multipart_boundary = "SPIRALV2_MULTIPART_BOUNDARY";
//ヘッダ
$fileupheader = array(
"Authorization:Bearer " . $apikey,
"X-Spiral-App-Authority:manage",
"Content-Type: multipart/form-data; boundary=" . $multipart_boundary . "",
);// POSTデータを生成します
$postdata = "--" . $multipart_boundary . "\r\n";
$postdata .= "Content-Disposition: form-data; name=\"file\"; filename=\"" . $filename . "\"\r\n";
$postdata .= "Content-Type: " . $filetype . ";\r\n\r\n";
$postdata .= $filedata;
$postdata .= "\r\n";
$postdata .= "--" . $multipart_boundary . "\r\n";
$postdata .= "Content-Disposition: form-data; name=\"fileUploadToken\"\r\n\r\n";
$postdata .= $filetoken;
$postdata .= "\r\n";
$postdata .= "--" . $multipart_boundary . "--\r\n";// curlライブラリを使って送信します。
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_HTTPHEADER, $fileupheader);
curl_exec($curl);
$upresponse = curl_multi_getcontent($curl);
curl_close($curl);
$arrUpres = json_decode($upresponse , true);
//ファイルキー取得
$fileKey = $arrUpres["fileKey"];
?>
ファイルダウンロード
<?php
//SPIRAL Ver2のAPI用のURL
$base_url = "https://api.spiral-platform.com/v1/apps";
$url = $base_url . "/{app}/dbs/{db}/{field}/{recordId}/files/{fileKey}/download";
//APIキー
$apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
//ヘッダ
$header = array(
"Authorization:Bearer ".$apikey,
);
// curlライブラリを使用して送信
$curl = curl_init($url);
//実行結果を文字列で取得できるように設定
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//ヘッダを指定
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
//セッションを実行し、その結果を取得
$data = curl_exec($curl);
//cURLのエラーメッセージを表示
if (curl_errno($curl)) echo curl_error($curl);
//セッションを閉じる
curl_close($curl);//データにダウンロードするヘッダーを付与して出力
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
echo $data;
?>