fedora commons 通过 REST 错误获取对象
fedora commons ingest object via REST error
我最近为我正在进行的项目设置了 FEDORA,以对各种内容进行分类
媒体。我希望能够通过 FEDORA REST api 使用文件(数据流)。我成功地通过 curl 创建了一个数字对象,没有任何问题。我还设法将 html 页面作为数据流添加到上述数字对象中,也没有任何问题。
但是,添加具有其他内容 types/file 类型的数字对象失败并引发内部服务器错误 500。检查日志时,出现以下错误:
[http-bio-8080-exec-18] (DatastreamResource) Error with uploaded://47 : XML was not well-formed. Invalid byte 1 of 1-byte UTF-8 sequence
以下是我如何摄取文件的代码片段:
$url = "http://localhost:8080/fedora/objects/changeme:5/datastreams/NEWDS8?controlGroup=X&dsLabel=LAZLO";
$file = "namibia2015.pdf";
// Build cURL options
$userPassword = "fedoraAdmin:test123"; // username:password
$verifyPeer = false; // false for ignoring self signed certificates
$headers = array("Accept: text/xml", "Content-Type: " . mime_content_type($file));
$fileContents = file_get_contents($file);
$curlOptions = array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_USERPWD => $userPassword,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_SSL_VERIFYPEER => $verifyPeer,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $fileContents
);
$curlHandle = curl_init();
$success = curl_setopt_array($curlHandle, $curlOptions);
throw new Exception(
sprintf(
"curl_setopt_array(...) failed. Error: %s. Info: %s",
curl_error($curlHandle),
print_r(curl_getinfo($curlHandle), true)
),
curl_errno($curlHandle)
);
}
$curlReturn = curl_exec($curlHandle);
$httpCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
我遇到了这个 post How can I ingest an image into Fedora Commons using PHP? 尝试了建议的方法,但仍然没有成功。
我做错了什么?我错过了什么?为什么可以将 html 文件数据流添加到数字对象,但当我尝试添加时却失败了
添加 .jpeg、.pdf、.txt 等?
我终于修正了这个错误。异常是由我在 curl 请求中构建 URL 参数的方式引起的。使用具有以下格式的 URL:
$url = "http://localhost:8080/fedora/objects/changeme:5/datastreams/NEWDS8?controlGroup=X&dsLabel=LAZLO";
会抛出错误。相反,您必须为要附加到 POST 请求的所有选项构建一个 http 查询。我是这样做的:
$array = array();
$array['dsID'] = '5' ;
$array['controlGroup'] = 'M' ;
$array['altIDS'] = 'Other';
$array['versionable'] = true;
$array['dsLabel'] = 'The pic';
$array['logMessage'] = 'Example log message';
$link = "http://localhost:8080/fedora/objects/changeme:5/datastreams/newobject";
$params = http_build_query($array);
$url = $link.'?'.$params; //add the http query parameters to the url
之后,我像以前一样发出 curl 请求,它将成功创建附加到数字对象的数据流。
希望这对以后的人有所帮助。
我最近为我正在进行的项目设置了 FEDORA,以对各种内容进行分类 媒体。我希望能够通过 FEDORA REST api 使用文件(数据流)。我成功地通过 curl 创建了一个数字对象,没有任何问题。我还设法将 html 页面作为数据流添加到上述数字对象中,也没有任何问题。
但是,添加具有其他内容 types/file 类型的数字对象失败并引发内部服务器错误 500。检查日志时,出现以下错误:
[http-bio-8080-exec-18] (DatastreamResource) Error with uploaded://47 : XML was not well-formed. Invalid byte 1 of 1-byte UTF-8 sequence
以下是我如何摄取文件的代码片段:
$url = "http://localhost:8080/fedora/objects/changeme:5/datastreams/NEWDS8?controlGroup=X&dsLabel=LAZLO";
$file = "namibia2015.pdf";
// Build cURL options
$userPassword = "fedoraAdmin:test123"; // username:password
$verifyPeer = false; // false for ignoring self signed certificates
$headers = array("Accept: text/xml", "Content-Type: " . mime_content_type($file));
$fileContents = file_get_contents($file);
$curlOptions = array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_USERPWD => $userPassword,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_SSL_VERIFYPEER => $verifyPeer,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $fileContents
);
$curlHandle = curl_init();
$success = curl_setopt_array($curlHandle, $curlOptions);
throw new Exception(
sprintf(
"curl_setopt_array(...) failed. Error: %s. Info: %s",
curl_error($curlHandle),
print_r(curl_getinfo($curlHandle), true)
),
curl_errno($curlHandle)
);
}
$curlReturn = curl_exec($curlHandle);
$httpCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
我遇到了这个 post How can I ingest an image into Fedora Commons using PHP? 尝试了建议的方法,但仍然没有成功。
我做错了什么?我错过了什么?为什么可以将 html 文件数据流添加到数字对象,但当我尝试添加时却失败了 添加 .jpeg、.pdf、.txt 等?
我终于修正了这个错误。异常是由我在 curl 请求中构建 URL 参数的方式引起的。使用具有以下格式的 URL:
$url = "http://localhost:8080/fedora/objects/changeme:5/datastreams/NEWDS8?controlGroup=X&dsLabel=LAZLO";
会抛出错误。相反,您必须为要附加到 POST 请求的所有选项构建一个 http 查询。我是这样做的:
$array = array();
$array['dsID'] = '5' ;
$array['controlGroup'] = 'M' ;
$array['altIDS'] = 'Other';
$array['versionable'] = true;
$array['dsLabel'] = 'The pic';
$array['logMessage'] = 'Example log message';
$link = "http://localhost:8080/fedora/objects/changeme:5/datastreams/newobject";
$params = http_build_query($array);
$url = $link.'?'.$params; //add the http query parameters to the url
之后,我像以前一样发出 curl 请求,它将成功创建附加到数字对象的数据流。
希望这对以后的人有所帮助。