【问题标题】:How to give double slash in url of flask api如何在烧瓶 api 的 url 中给出双斜杠
【发布时间】:2019-11-23 05:00:06
【问题描述】:

我需要将一个字符串传递给一个 api,它是一个文件路径来处理文件并返回输出。示例:网址是

122.23.198.198:5000/D:/FILES/meta.pdf

这里的问题是linux机器中文件的路径是/D:/FILES/meta.pdf。问题在于 D 之前的斜杠:如何在我的烧瓶 api 路由中转义/添加双斜杠。我目前收到文件未找到错误。

参考代码:

app = Flask(__name__)
api = Api(app)   
class ectdtext(Resource):
    def get(self, result):
        return {'data': ectd.convert(result)}

#api.add_resource(ectdtext, '/ectd/<result>')
#categorie

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_dir(path):
    categories = convert(path)
    return categories

#@app.route('/get_dir/<path>')
#def get_dir(path):
#    return path

if __name__ == '__main__':
     app.run()

【问题讨论】:

  • 您真的需要这样做吗,或者它可以像通常那样作为参数吗? 122.23.198.198:5000/?path=%2fD:%2fFILES%2fmeta.pdf
  • 可以是我展示的方式,也可以是你给的模式。它必须处理 5000/ 之后发送的文件并返回该文件的类别。如果我传递了您在 url 中发送的内容,则它现在无法正常工作。如何配置我的路由以接受它?

标签: python linux flask url-parameters slash


【解决方案1】:

所以,基本上,你想将 Linux 风格的路径转换为 ​​Windows 风格,那么你可以使用os.path.abspath

>>> os.path.abspath('/D:/FILES/meta.pdf')
'D:\\FILES\\meta.pdf'

您需要将代码更改为:

import os  # <--

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_dir(path):
    categories = os.path.abspath(path)  # <--
    return categories

但是,我建议在视图函数中接受相对 URL,然后将其与基本路径结合起来,例如:

import os

basedir = 'the base dir that stores the upload files'

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_dir(path):
    categories = os.path.join(basedir, path)
    return categories

或者您可能需要过滤路径以确保安全:

>>> from werkzeug import secure_filename
>>> secure_filename('the path')

【讨论】:

  • 谢谢。我用 abspath 尝试了你的第一种方法,但它正在做的是将我的 python 文件位置的路径与 pdf 文件的位置并说文件未找到错误。但是,如果我将 pdf 文件复制到我的 python 脚本的位置,它就可以工作了。
猜你喜欢
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2011-05-18
  • 2018-08-14
  • 2018-03-18
  • 2012-09-06
  • 2019-09-13
相关资源
最近更新 更多