Как загрузить несколько файлов с несколькими частями в каратэ - PullRequest
1 голос
/ 25 марта 2019

Я хотел бы загрузить несколько файлов изображений в одном запросе, используя multipart. Я рассмотрел примеры каратэ по этому вопросу, но загрузка нескольких файлов не удовлетворяет моей потребности (/ несколько конечных точек здесь - https://github.com/intuit/karate/blob/master/karate-demo/src/main/java/com/intuit/karate/demo/controller/UploadController.java). Моя подпись метода обслуживания (Spring REST) ​​ожидает массив MultipartFile [], так что я могу принять любое количество файлов. Вот мой сценарий:

Scenario: Upload multiple files
    * def json = {}
    * set json.files[0] = { read: 'file1.jpg', filename: 'file1.jpg', contentType: 'image/jpeg' }
    * set json.files[1] = { read: 'file2.jpg', filename: 'file2.jpg', contentType: 'image/jpeg' }
    Given path '/rest' 
    And multipart files json
    When method post
    Then status 200

А вот и метод веб-службы Spring (просто пытаюсь получить файлы прямо сейчас, поэтому этот метод мало что делает):

@PostMapping("/rest")
public String handleFileUpload(@RequestParam("file") MultipartFile[] file) {
   System.out.println("Len: " + file.length);
   for(MultipartFile currentFile : file) {
      System.out.println("In here: " + currentFile.getOriginalFilename());
   }
   return file[0].getOriginalFilename();
}

Когда я запускаю это, я получаю сообщение об ошибке каратэ: «значение составного файла должно быть json»

Если я изменю сценарий, чтобы сделать это:

    Scenario: Upload multiple files
        * def json = {}
        * set json.files = { read: 'file1.jpg', filename: 'file1.jpg', contentType: 'image/jpeg' }, { read: 'file2.jpg', filename: 'file2.jpg', contentType: 'image/jpeg' }
        Given path '/rest' 
        And multipart files json
        When method post
        Then status 200

Тогда тест выполняется нормально, но в массиве MultipartFile 'files' (аргумент метода службы) появляется только один файл.

Как правильно загрузить несколько файлов в метод веб-службы, описанный выше с использованием каратэ?

Редактировать: добавление кода клиента (ниже) и обновленного метода Spring выше.

Вот простая форма HTML, которая отправит несколько файлов в метод Spring выше:

<form method="POST" enctype="multipart/form-data" action="/rest">
    <table>
        <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
        <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
        <tr><td></td><td><input type="submit" value="Upload" /></td></tr>
    </table>
</form>

При отправке я получаю 2 файла в сервисном методе.

1 Ответ

0 голосов
/ 25 марта 2019

Ничего себе, никогда не видел это раньше, и вполне вероятно, что каратэ не поддерживает это. Мне также интересно, допустимо ли это согласно спецификации HTTP - насколько я знаю - каждый файл должен иметь уникальное имя поля. Есть ли у вас соответствующий клиентский код для HTTP-клиента Apache, который бы помог.

Лучше всего подать запрос на добавление функции, а также ввести код для ускорения. Обратите внимание, что это первый раз за 2 года, когда кто-либо сообщил об этом как о проблеме.

...