我有一个烧瓶api,效果很好。最近,我们添加了一个文件上传部分。一些服务器端代码向api发送调用,而api反过来应该触发这些上传文件的处理。 api调用本身包括文件的绝对路径。所以我的路线定义如下:
@app.route('/Uploads/<string:userId>/<string:pathToFile>', methods=['POST'])
处理上传的代码是PHP。在将路径发送到api之前,它通过一个方法发送,该方法将斜杠转换为%符号。对于那些熟悉它的人来说,该方法称为urlencode
。
我遇到的问题是烧瓶无法识别路线。即使它很简单,请求也会失败:
localhost:5000/Uploads/testuser/%2Fhome
在上面的例子中,我认为%
字符导致问题。如果我删除它,则请求成功。
我确实找到了以下似乎相关的SO帖子:
How to pass file path in a REST API ala Dropbox using Flask-RESTful?其中FP建议使用path
占位符而不是string
。我尝试在我的代码中这样做:
@app.route('/Uploads/<string:userId>/<path:pathToFile>', methods=['POST'])
我传递了一条原始路径(没有通过url编码)。但是,这没有用。
有没有人知道通过烧瓶API呼叫传递网址或路径的正确方法?
答案 0 :(得分: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
,否则您将收到“不允许的方法”错误。