如何用flas创建动态文件发送算法

2024-05-12 13:47:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我用烧瓶装锉刀有点问题。在

首先,我的文件树:

processedMain
--processed1
--processed2
--...
--processedN

在每个文件夹中,我都有一堆文件,我把它们都放在表中,我把href链接到每个文件的路径,然后通过route函数传递给send_file return。在

唯一能解决问题的方法就是@应用程序路径对于每个硬编码的子文件夹,如下所示:

^{pr2}$

其中pathFits1[i]是子文件夹的路径,当用户单击web表中的文件时传递id。在

问题是我有很多子文件夹,创建起来很累@应用程序路径为每一个。 有没有可能为每件事都创建一条路线?在

p.S。 我对烧瓶还不熟悉,所以如果我忘了说什么,请告诉我我会把它装满的。在

解决方案

事实上,这是令人尴尬的简单。 正如@Dan.D指出的,flask有捕获变量的转换器,对我来说这是我所需要的,因为我的id变量已经包含了文件的完整路径。 所以现在只有这3行代码来代替一整串或重复的代码:

^{3}$

其中id是文件的完整路径,路径:是路径的转换器,fileName是用户下载的文件名,其中没有路径(都在最后一个斜杠之后)


Tags: 文件代码用户路径文件夹id应用程序烧瓶
2条回答

据我所知,Flask不支持@app.routeurl中的多个变量部分。但是,可以将文件的完整路径设置为变量节,然后对其进行解析以提取子文件夹路径和文件ID

下面是一个有效的例子:

pathFits1 = [None] * 3
pathFits1[1] = 'content/images1/'
pathFits1[2] = 'content/images2/'

@app.route('/<path:fullpath>', methods=['GET'])
def returnImg(fullpath):
    global pathFits1
    print(" > GET request: ", fullpath)

    # parse the full path to extract the subpath and ID
    # subpath: get everything until the last slash
    subpath = fullpath.rsplit('/', 1)[:-1][0] + '/'
    # id: get string after the last slash
    id = fullpath.rsplit('/', 1)[-1]

    print("ID:", id, "\tsubpath:", subpath)

    # try to send the file if the subpath is valid
    if subpath in pathFits1:
        print("valid path, attempting to sending file")
        try:
            return send_file(subpath + id, as_attachment=True, attachment_filename=id)
        except Exception as e:
            print(e)
            return "file not found"
    return "invalid path"

但是,更好的实现方式是将文件ID和路径作为GET请求参数(例如http://127.0.0.1:8000/returnimg?id=3&path=content/images1/)发送并按如下方式检索它们:

^{pr2}$

可以在路由表达式中捕获路径。根据文件:

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % subpath

来自http://flask.pocoo.org/docs/1.0/quickstart/

相关问题 更多 >