CURL - это отличный инструмент для выполнения запросов к серверам, особенно его удобно использовать для тестирования API.
Для загрузки файлов с помощью CURL многие люди совершают ошибку, думая использовать -X POST как обычную форму данных; на самом деле, такой способ приведет к ошибкам, но есть случаи когда это действительно нужно.
Передача файла как тело запроса
Данный способ очень полезен при тестировании записи в Elasticsearch
1 | curl -H 'Content-type: application/json' -XPOST "http://127.0.0.1:9200/_bulk" --data-binary @file.json |
Загрузка файла
Правильным способом загрузки файлов с помощью CURL является использование опции -F ( - form), которая добавит в запрос enctype="multipart/form-data".
1 | curl -F 'data=@path/to/local/file' UPLOAD_ADDRESS |
Например, если я хочу загрузить файл по адресу /home/hello.txt на сервер http://localhost/upload, который обрабатывает ввод файла с параметром формы с именем img_avatar, я сделаю запрос следующим образом,
1 | curl -F 'img_avatar=@/home/hello.txt' http://localhost/upload |
Загрузка нескольких файлов
Чтобы отправить запрос на загрузку нескольких файлов, просто добавьте дополнительный параметр -F,
1 | curl -F 'fileX=@/path/to/fileX' -F 'fileY=@/path/to/fileY' ... http://localhost/upload |
Загрузка массива файлов
Чтобы отправить запрос на загрузку файла массива, просто поставьте дополнительные опции -F с тем же именем параметра формы, что и у массива,
1 | curl -F 'files[]=@/path/to/fileX' -F 'files[]=@/path/to/fileY' ... http://localhost/upload |