1

私は最近、さまざまなメディアをカタログ化するために取り組んでいるプロジェクトのために FEDORA をセットアップしました。FEDORA REST API を介してファイル (データストリーム) を使用できるようにしたいと考えています。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);

この投稿に出くわしましたPHPを使用してFedora Commonsに画像を取り込むにはどうすればよいですか? 提案された方法を試しましたが、まだ運がありません。

私は何を間違っていますか?私は何が欠けていますか?HTML ファイルのデータストリームをデジタル オブジェクトに追加できるのに、.jpeg、.pdf、.txt などを追加しようとすると失敗するのはなぜですか?

4

1 に答える 1

0

最後にエラーを修正しました。例外は、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 リクエストを行うと、デジタル オブジェクトに添付されたデータ ストリームが正常に作成されます。

これが将来誰かを助けることを願っています。

于 2016-10-29T11:56:03.033 に答える