新規投稿
フォローする

phpで添付ファイルをアップロードする

自習して下記のコードを書いたんですが、

<?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>


実行したら「ファイルをアップロードし、レコードを更新しました。」
と表示されていますが、
アプリの方にファイルが添付されないです。
どこが違うんですか。

皆さんお手数をおかけしますが
よろしくお願いします。

0

1件のコメント

Avatar
rex0220

’value’ が抜けているようです。

'file1' => array(
array(
'fileKey' => $file_key,
'name' => $file_name
)
0
サインインしてコメントを残してください。