2014-12-05 58 views
1

我有一个很好的烧瓶api。最近,我们添加了文件上传部分。某些服务器端代码向api发送一个调用,这又会触发对这些上传文件的处理。 api调用本身包含文件的绝对路径。所以我有一个定义如下的路由:将url传递给flask api endpoint

@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调用通过URL或路径?

+0

为什么不能正常工作? – quantumtremor 2014-12-05 02:57:36

回答

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错误。

+0

你是正确的,主要的前锋是问题。这让我感到困惑,因为新的结果看起来像一个非常长的api调用,但我猜这就是烧瓶的做法。 – melchoir55 2014-12-05 04:41:13