Reference user supplied file with Flask app

我怕爱的太早我们不能终老 提交于 2019-12-12 04:34:09

问题


I am new to Flask and web applications in general. I have images that could be located in different locations:

-directory1
  -image1
-directory2
  -subdirectory
    -image2
-directory3
  -flask_app
    -app.py
    -static

The purpose of the app is to dynamically provide access to the content in other directories which is not static and subject to change for each user. The content cannot be moved or modified.

How do I display images from other directories within the app without moving or modifying them based on input values from the user?

I have the following so far but the image link is broken:

from flask import Flask, render_template, request, send_from_directory

current_filepath = /directory2/image{}.png

app = Flask(__name__, static_url_path='')

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


@app.route('/', methods=['GET','POST'])
def print_form():
    if request.method == 'POST':
        test = current_filepath.format(request.form['image_num'])
        return render_template('form.html', result=test)

    if request.method == 'GET':
        return render_template('form.html')


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

With the following form.html file:

<!DOCTYPE html>
<html lang="en">

<body>
<form method="POST" action=".">
   <input id="post_form_id" name="image_num" value="" />
   <input type="submit">
</form>

{% if result %}
    {{ url_for('download_file', filename= result) }}
    <img src={{ url_for('download_file', filename= result) }}>
{% endif %}

</body>
</html>

回答1:


app/
   app.py
   ...
uploads/
   dir1/
      img1.png
      ...   
...
app.config['UPLOAD_FOLDER'] = 'path/to/uploads/dir1'

@app.route('/file/<path:filename>')
def img_file(filename):
    filename = filename + '.png'
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

@app.route('/', methods=['GET', 'POST'])
def index():
    filename = None
    if request.method == 'POST':
        filename = request.form['img_num']
    return render_template('form.html', filename=filename)

<form method="post" action="" >
    <input type="text" id="form_id" name="img_num">
    <input type="submit" value="submit">
</form>
    {% if filename %}
    <img src=" {{ url_for('img_file', filename=filename) }}">
    {% endif %}


来源:https://stackoverflow.com/questions/41310172/reference-user-supplied-file-with-flask-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!