我有一个烧瓶api,效果很好。最近,我们添加了一个文件上传部分。某些服务器端代码向 API 发送调用,这反过来应触发对这些上传文件的处理。api 调用本身包括文件的绝对路径。所以我有一个定义的路由,如下所示:
@app.route('/Uploads/<string:userId>/<string:pathToFile>', methods=['POST'])
处理上传的代码是PHP。在将路径发送到 api 之前,它通过一个转义斜杠的方法发送,将它们转换为 % 符号。对于熟悉它的人来说,该方法被称为urlencode
。
我遇到的问题是烧瓶无法识别路线。即使请求如此简单,请求也会失败:
localhost:5000/Uploads/testuser/%2Fhome
在上面的例子中,我相信%
字符导致了问题。如果我删除它,则请求成功。
我确实找到了以下似乎相关的SO帖子:如何使用 Flask-RESTful 在 REST API ala Dropbox 中传递文件路径?在其中,FP建议使用path
占位符而不是string
。我尝试在我的代码中这样做,如下所示:
@app.route('/Uploads/<string:userId>/<path:pathToFile>', methods=['POST'])
我向它传递了一个原始路径(没有通过 url 编码(。但是,这不起作用。
有谁知道通过烧瓶 api 调用传递 url 或路径的正确方法?
您可能
传递正斜杠(/
或%2F
(作为第一个字符。不要这样做,否则写入的端点将无法与 Flask 匹配。
您是否尝试过这样的准系统示例:
@app.route('/Uploads/<string:userId>/<path:pathToFile>')
def hello_world(userId, pathToFile):
return '{uid} {path}'.format(uid=userId, path=pathToFile)
这确实会呈现预期的响应。
另外:检查函数参数,确保它们与网址参数一致。还要检查您的请求是否POST
且未GET
,否则您将收到"方法不允许"错误。