fedora достает объект через ошибку REST

Недавно я создал FEDORA для проекта, над которым я работаю, чтобы каталогизировать различные
средства массовой информации. Я хочу иметь возможность использовать файлы (потоки данных) через API FEDORA REST. Мне удалось создать цифровой объект с помощью curl без каких-либо проблем. Мне также удалось без проблем добавить html-страницу в качестве потока данных к упомянутому выше цифровому объекту.

Однако при добавлении цифрового объекта с другими типами контента / типами файлов происходит сбой и выдается внутренняя ошибка сервера 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);

Я наткнулся на этот пост Как я могу вставить изображение в Fedora Commons, используя PHP? попробовал предложенный метод, но все равно не повезло.

Что я делаю неправильно? Что мне не хватает? Почему можно добавить поток данных html-файла к цифровому объекту, но не удается, когда я пытаюсь
добавить .jpeg, .pdf, .txt и т. д.?

1

Решение

Я наконец-то исправил ошибку. Исключение было вызвано тем, как я структурировал параметры URL в своем запросе curl. Используя URL в следующем формате:

$url = "http://localhost:8080/fedora/objects/changeme:5/datastreams/NEWDS8?controlGroup=X&dsLabel=LAZLO";

скину ошибку. Вместо этого вам нужно создать http-запрос всех параметров, которые вы хотите присоединить к запросу POST. Я сделал это следующим образом:

$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, как и раньше, и он успешно создаст поток данных, прикрепленный к цифровому объекту.

Надеюсь, что это поможет кому-то в будущем.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]