ユーザーのプロフィール写真をアップロードできません。404 エラーが発生し続けます。これは、API ドキュメントによると、プロファイルが見つからないことを示しています。ただし、すぐに表示するコードの上に、プロファイルを取得するコードがあり、使用している特定の userId に対して存在します。さらに:
- これは PHP SDK を使用しています
- 認証に使用したアカウントには、ユーザー プロファイルを編集するためのアクセス権があります
- 私が使用しているテスト画像は存在し、それを読み取ることができます
これが私のコードです。少しずさんですが、この特定のテスト ユーザーに対してこれを実行したら、クリーンアップします。
$file = "testimage.jpeg";
$image_data = file_get_contents($file);
// Build our data
$uid = uniqid();
$data = "--" . $uid . "\r\n".
"Content-Disposition: form-data; name=\"profileImage\"; filename=\"profileImage.jpeg\"\r\n".
"Content-Type: image/jpeg\r\n".
"\r\n".
$image_data . "\r\n".
"--" . $uid . "--";
$success = false;
$tryAgain = true;
$numAttempts = 1;
$url = "/d2l/api/lp/1.0/profile/user/".$userId."/image";
$uri = $opContext->createAuthenticatedUri($url, "POST");
curl_setopt($ch, CURLOPT_URL, $uri);
while ($tryAgain && $numAttempts < MAX_NUM_ATTEMPTS) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Disposition: multipart/form-data; boundary='.$uid,
'Content-Length: ' . strlen($data))
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$responseCode = $opContext->handleResult($response, $httpCode, $contentType);
if ($responseCode == D2LUserContext::RESULT_OKAY) {
$success = true;
$tryAgain = false;
}
elseif ($responseCode == D2LUserContext::RESULT_INVALID_TIMESTAMP) {
// Try again since time skew should now be fixed.
$tryAgain = true;
}
else { // Something bad happened
echo "here:\r\n".
$httpCode.
"\r\n\r\n".
$responseCode;
exit;
}
$numAttempts++;
}
何が欠けているのか途方に暮れています。アドバイスをいただければ幸いです。ありがとう
編集: API ドキュメントのこのセクションに気付きました:
ノート
このアクションを使用するには、サービスがアプリケーション固有のアクセス許可を付与している必要があります (つまり、特定のアプリケーション ID とキーにこのアクションを試行するためのアクセス許可を付与しています)。
アプリ ID/キーに本当に権限があるかどうかを確認します。と思っていたのですが、間違った情報を教えてもらったのかもしれません。これについてお尋ねします。