自習して下記のコードを書いたんですが、
<?php
// APIトークン
define('API_TOKEN', 'aaaaaaaaaaaaaaaaaaaa');
// アプリID
define('APP_ID', '23');
// サブドメイン
define('SUB_DOMAIN', 'asdaaaaaaaaaaaaaaa');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// ファイル情報の取得
$file_name = $_FILES['file']['name'];
$file_path = $_FILES['file']['tmp_name'];
// レコード番号の取得
$record_number = $_POST['record_number'];
// ファイルのアップロードURLの作成
$file_key = $record_number . '/' . $file_name;
$upload_url = "https://" . SUB_DOMAIN . ".cybozu.com/k/v1/file.json?fileKey=" . urlencode($file_key);
// ファイルのアップロード
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $upload_url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"X-Cybozu-API-Token: " . API_TOKEN,
// Content-Typeを修正
"Content-Type: multipart/form-data; boundary=" . uniqid()
));
// ファイルをバイナリモードで読み込み
$file_contents = file_get_contents($file_path);
// リクエストボディの作成
$request_body = "--" . uniqid() . "\r\n"
. "Content-Disposition: form-data; name=\"file\"; filename=\"" . $file_name . "\"\r\n"
. "Content-Type: application/octet-stream\r\n\r\n"
. $file_contents . "\r\n"
. "--" . uniqid() . "--";
curl_setopt($curl, CURLOPT_POSTFIELDS, $request_body);
$response = curl_exec($curl);
curl_close($curl);
// アップロード結果の確認
$response_json = json_decode($response, true);
if (isset($response_json['code']) && $response_json['code'] == 'CB_VS01') {
echo "ファイルのアップロードに失敗しました。\n";
echo "エラーメッセージ:" . $response_json['message'];
} else {
// ファイルキーの取得
$file_key = $response_json['fileKey'];
// レコード更新用のデータを作成
$body = array(
'app' => APP_ID,
'id' => $record_number,
'record' => array(
'file1' => array(
array(
'fileKey' => $file_key,
'name' => $file_name
)
)
)
);
// レコードの更新
$options = array(
'method' => 'POST',
'headers' => array(
'X-Cybozu-API-Token' => API_TOKEN,
'Content-Type' => 'application/json'
),
'body' => json_encode($body)
);
$results = wp_remote_request("https://" . SUB_DOMAIN . ".cybozu.com/k/v1/record.json", $options);
// 更新結果の確認
$results_json = json_decode($results['body'], true);
if (isset($results_json['code']) && $results_json['code'] == 'CB_VS02') {
echo "レコードの更新に失敗しました。";
echo "エラーメッセージ:" . $results_json['message'];
} else {
$record_id = $results_json['id'];
$options = array(
'method' => 'GET',
'headers' => array(
'X-Cybozu-API-Token' => API_TOKEN,
'Content-Type' => 'application/json'
)
);
$record_url = "https://" . SUB_DOMAIN . ".cybozu.com/k/v1/record.json?app=" . APP_ID . "&id=" . $record_id;
$record = wp_remote_request($record_url, $options);
$record_json = json_decode($record['body'], true);
if (isset($record_json['code']) && $record_json['code'] == 'CB_VS02') {
echo "レコードの取得に失敗しました。";
echo "エラーメッセージ:" . $record_json['message'];
} else {
$attached_files = $record_json['record']['添付ファイル'];
echo "ファイルをアップロードし、レコードを更新しました。";
echo "レコードID:" . $record_id . "<br>";
echo "添付ファイル:<br>";
foreach ($attached_files as $attached_file) {
echo $attached_file['name'] . "<br>";
}
}
}
}
}
?>
<form method="post" enctype="multipart/form-data">
<label for="file">ファイルを選択してください。</label>
<input type="file" name="file" id="file"><br>
<label for="record_number">レコード番号を入力してください。</label>
<input type="text" name="record_number" id="record_number"><br>
<input type="submit" value="送信">
</form>
実行したら「ファイルをアップロードし、レコードを更新しました。」
と表示されていますが、
アプリの方にファイルが添付されないです。
どこが違うんですか。
皆さんお手数をおかけしますが
よろしくお願いします。
1件のコメント
’value’ が抜けているようです。