Передача URL в конечную точку API колбы

У меня есть 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-вызов колбу?

1

Решение

Вы можете передавать слеш (либо / или же %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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]