我在为用户上传个人资料图片时遇到问题。我不断收到 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/Key 是否确实有权限。我以为是的,但也许我得到了不正确的信息。我会询问这件事。