python - 如何在 flask api 的 url 中给出双斜杠

标签 python linux flask url-parameters slash

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

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

这里的问题是文件在linux机器中的路径是/D:/FILES/meta.pdf。问题出在 D 之前的斜线:如何在我的 flask 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()

最佳答案

所以,基本上,你想将 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

但是,我建议在 View 函数中接受相对 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')

关于python - 如何在 flask api 的 url 中给出双斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023686/

相关文章:

java - : "Resolver". java.lang.NullPointerException 期间发生内部错误

python - 使用 HTTP Digest 身份验证保护 REST 端点

python - 从test.pypi安装自己的软件包时如何修复 "No matching distribution found for {package name}"

python - 如何从 Ansible python playbook api 获取远程标准输出

linux - rpmbuild:目录的共同所有权

javascript - 当输入错误时,jQuery自动完成ajax无法自动更正

python - 无法删除涉及继承模型和与 Flask-SQLAlchemy 的关系的行

python - 如何正确调用CreateProcessW?

python - Tensorflow 2.1/Keras - 尝试卡住图形时出现 "output_node is not in graph"错误

linux - sed操作需要在一些标签之间附加文本