У меня есть Api колбу, которая работает довольно хорошо. Недавно мы добавили раздел загрузки файлов. Какой-то серверный код отправляет вызов API, который, в свою очередь, должен инициировать обработку этих загруженных файлов. Сам вызов API включает абсолютный путь к файлу. Итак, у меня есть маршрут, определенный как:
@app.route('/Uploads/<string:userId>/<string:pathToFile>', methods=['POST'])
Код, который обрабатывает загрузку — это PHP. Перед отправкой пути к API он отправляется с помощью метода, который экранирует косые черты, превращая их в знаки%. Метод называется urlencode
для тех из вас, кто знаком с этим.
У меня проблема в том, что фляга не распознает маршрут. Запрос не будет выполнен, даже если он прост:
localhost:5000/Uploads/testuser/%2Fhome
В приведенном выше примере, я считаю, %
характер вызывает проблему. Если я его удалю, то запрос будет выполнен успешно.
Я нашел следующий пост SO, который кажется уместным:
Как передать путь к файлу в Dropbox через API REST, используя Flask-RESTful? В этом FP предлагает использовать path
заполнитель вместо string
, Я попытался сделать это в моем коде так:
@app.route('/Uploads/<string:userId>/<path:pathToFile>', methods=['POST'])
Я прошел его по сырому пути (не прошел через кодирование URL). Однако это не сработало.
Кто-нибудь знает правильный способ передачи URL-адресов или путей через API-вызов колбу?
Вы можете передавать слеш (либо /
или же %2F
) как первый персонаж. Не делайте этого, иначе Flask не будет соответствовать конечной точке, как написано.
Вы пробовали пример босоножек вот так:
@app.route('/Uploads/<string:userId>/<path:pathToFile>')
def hello_world(userId, pathToFile):
return '{uid} {path}'.format(uid=userId, path=pathToFile)
Это делает ожидаемый ответ.
Также: проверьте параметры вашей функции, чтобы убедиться, что они совпадают с параметрами URL. Также проверьте ваш запрос POST
и не GET
в противном случае вы получите ошибку Method Not Allowed.
Других решений пока нет …