IBM Watson Document Conversion отвечает с ошибкой 415, хотя я загружаю PDF?

У меня есть html-форма, которая позволяет пользователям загружать файл, который затем использует API преобразования документов IBM Watson для преобразования текста документа в нормализованный текст, который затем вставляется в базу данных.

При тестировании я несколько раз получал следующую ошибку:

{ "код": 415, "ошибка": "Тип носителя [текстовый/обычный] входного документа не поддерживается. Была предпринята попытка автоматического исправления, но автоматически обнаруженный тип носителя [текстовый/обычный] также не поддерживается. Поддерживается Типы носителей: application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/pdf, text/html, application/xhtml+xml ». }

Вот моя форма (testform.html):

    <form action="testform.php" method="post" enctype="multipart/formdata">
     <input type="file" name="newdoc" id="newdoc"> Upload New Doc:
     </input>
     <button type="submit" name="submit">Submit</button>
    </form>

А вот мой php-скрипт (testform.php):

    <?php 
    $filename = $_FILES['newdoc']['name'];
    $filetype = $_FILES['newdoc']['type'];
    $filesize = $_FILES['newdoc']['size'];
    $filetmp  = $_FILES['newdoc']['tmp_name'];

    // Watson Document Conversion
    $dcuser = 'arbitrary_user';
    $dcpass = 'arbitrary_pwd';
    $userpwd = $dcuser . ":" . $dcpass;

    // Initialize cURL
    $documentconversion = curl_init();

    // Set POST 
    curl_setopt($documentconversion, CURLOPT_POST, true);

    // Set DC API URL
    curl_setopt($documentconversion, CURLOPT_URL, 
    'https://gateway.watsonplatform.net/document-
    conversion/api/v1/convert_document?version=2015-12-15');

    // Set Username:Password
    curl_setopt($documentconversion, CURLOPT_USERPWD, $userpwd);

    // Set conversion units, file, and file type
    curl_setopt($documentconversion, CURLOPT_POSTFIELDS, array(
     'config' => "{\"conversion_target\":\"normalized_text\"}",
     'file'   => '@' . realpath($filetmp) . ';type=' . $filetype
    ));

    // Set return value
    curl_setopt($documentconversion, CURLOPT_RETURNTRANSFER, true);

    // Execute and get response
    $response = curl_exec($documentconversion);

    // Close cURL
    curl_close($documentconversion);
    ?>

Обычно переменная $response будет содержать преобразованный текст, но я не получаю ничего, кроме упомянутых выше ошибок 415, хотя я загружаю только PDF-файлы.

Есть мысли, почему не работает?


person Daniel La    schedule 15.06.2017    source источник


Ответы (1)


Судя по ошибке, ваш PHP-скрипт передает тип файла text/plain, который не поддерживается службой. Вместо этого попробуйте передать application/pdf в качестве типа файла.

Вы также можете попробовать запустить запрос с помощью простой команды curl:

curl -X POST -u "ВАШЕ_ИМЯПОЛЬЗОВАТЕЛЯ":"ВАШ_ПАРОЛЬ" -F config="{\"conversion_target\":\"normalized_text\"}" -F "[email protected];type=application/pdf" "https://gateway.watsonplatform.net/document-conversion/api/v1/convert_document?version=2015-12-15"

Как можно найти в справочнике по API поддерживаются следующие типы: text/html, text/xhtml+xml, application/pdf, application/msword и application/vnd.openxmlformats-officedocument.wordprocessingml.document.

person Anton Prevosti    schedule 15.06.2017
comment
Я только что попробовал это, и я все еще получаю ошибку 415 =\ - person Daniel La; 15.06.2017
comment
Не могли бы вы попробовать это с помощью команды curl: curl -X POST -u {имя пользователя}: {пароль} -F config={\conversion_target\:\normalized_text\} -F [email protected];type=application/pdf gateway.watsonplatform.net/document-conversion/api /v1/ - person Anton Prevosti; 15.06.2017
comment
Получение ошибки 401: {код: 401, ошибка: не авторизовано, описание: 2017-06-15T16:17:17-04:00, Ошибка ERCDPLTFRM-INVLDCHR при доступе к gateway.watsonplatform.net/document-conversion/api/v1/, Tran-Id : шлюз-dp02-1290491232 - } - person Daniel La; 15.06.2017
comment
Команда curl была искажена в комментарии. Я добавил команду curl в тело ответа. Пожалуйста, попробуйте это вместо этого. - person Anton Prevosti; 16.06.2017