Flask重定向到随机命名的文件夹

时间:2017-01-30 04:34:46

标签: python flask

我正在构建一个小应用程序(最终):

上传文件+使用后台分析工具对其进行处理+将其反馈给上传它的用户。我正在尝试将每个文件放入一个随机生成的文件夹名称中,以便对事物进行分类。

首先,我正在上传重定向工作,他们几乎就在那里,但我似乎无法将瓶子重定向到随机生成的文件夹名称,即使它存在并且用户具有该文件已上传。

这就是我如何完成这个......

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        foldername = tempfile.mkdtemp(prefix='file', dir='uploads')
        file.save(os.path.join(foldername, filename))
        return redirect(url_for('uploaded_file', foldername=foldername, filename=filename))
    else:
        return '<h3>Invalid File, PDF or image only.</h3>'

@app.route('/<foldername>/<filename>')
def uploaded_file(foldername, filename):
    return send_from_directory(filename)

在重定向上,文件位于正确的位置,文件夹位于正确的位置,浏览器将指向正确的位置,但烧瓶404s ... ...

192.168.1.69 - - [29/Jan/2017 22:32:19] "GET / HTTP/1.1" 200 -
192.168.1.69 - - [29/Jan/2017 22:32:25] "POST /upload HTTP/1.1" 302 -
192.168.1.69 - - [29/Jan/2017 22:32:25] "GET /uploads/file0wr5ug4y/Screen_Shot_2017-01-25_at_11.23.48_AM.png HTTP/1.1" 404 -

1 个答案:

答案 0 :(得分:0)

忽略对第一个回复字符串的最后一条评论,试错了。

foldername也必须传递给send_from_directory函数,更重要的是必须以'path:'为前缀,以允许filename变量值为路径。

所以最后的路线看起来像......

@app.route('/<foldername>/<path:filename>')
def uploaded_file(foldername, filename):
    return send_from_directory(foldername, filename)