Загрузите CSV в Restler 3rc5 через CSVformat

Я пытаюсь отправить CSV в один из наших API и импортировать из него данные. Я взглянул на CSVFormat, и похоже, что он обрабатывает синтаксический анализ CSV и помещает результат в массив, и это здорово! Однако у меня возникают некоторые проблемы при попытке выполнить вызов POST.

В моем файле index.php поддерживаемые форматы установлены следующим образом:

$r->setSupportedFormats('JsonFormat', 'CsvFormat');

Однако, когда я использую Postman для отправки CSV-файла в свой API, я получаю следующую ошибку:

{
    "error": {
        "code": 403,
        "message": "Content type `multipart/form-data` is not supported."
    },
    "debug": {
        "source": "Restler.php:468 at setup stage",
        "stages": {
            "success": [],
            "failure": [
                "get",
                "route",
                "negotiate",
                "message"
            ]
        }
    }
}

Я попытался изменить CsvFormat на UploadFormat, и это работает, но CSV не анализируется. Как я могу загрузить CSV с помощью POST в свой API и проанализировать его с помощью CsvFormat?


person zongweil    schedule 23.07.2014    source источник


Ответы (1)


Вам нужно добавить оба UploadFormat в поддерживаемые форматы

Ваш класс API может выглядеть как

<?php

use Luracast\Restler\Scope;

class Api
{
    public function post(array $csv)
    {
        $parsed_data = Scope::get('CsvFormat')->decode(file_get_contents($csv['tmp_name']));
        return $parsed_data;
    }
}

Вы можете использовать следующую форму, чтобы опубликовать свой CSV-файл.

<html>
<body>
    <form action="/api" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label><input type="file" name="csv" id="file" /> <br />
        <input type="submit" name="submit" value="Submit" />
    </form>
</body>
</html>
person Community    schedule 24.07.2014
comment
Спасибо Люракаст! Есть ли где-нибудь документация о CSV? Я не смог найти ничего, что указывало бы на то, что вам нужны как UploadFormat, так и CSVFormat. - person zongweil; 24.07.2014