python - Flask 和 sqlalchemy : Get uploaded file using path stored on database

标签 python flask flask-sqlalchemy flask-wtforms

我正在使用 flask 和 sqlalchemy,我遇到了文件上传方面的问题。

我正在使用表单上传文件并将 URL 存储到数据库,这样我就可以在页面内部显示它。

表单代码如下:

        boxart = request.files['boxart']

        if boxart:
            filename = secure_filename(boxart.filename)
            boxart_path = os.path.join(app.config['UPLOAD_FOLDER']+"boxart/", filename)
            boxart.save(boxart_path)
            game_son.boxart = boxart_path

        db.session.add(game_son)
        db.session.commit()

所以我转到我的模板,我可以打印 game_son.boxart 的内容,并且有文件的完整路径。如果我点击链接,我可以访问,但图像不会显示在标签内......

我尝试使用以下方法将其添加到模板中:

    <img src="{{ game_son.boxart_url() }}" />

在模型中,我定义了一个 boxart_url 方法,以防我需要在发送之前解析字符串

  class Game_son(db.Model):
    __searchable__ = ['version_name']
    son_id = db.Column(db.Integer, primary_key=True)
    version_name = db.Column(db.String(128), index=True, unique=False)
    son_timestamp = db.Column(db.DateTime)
    dad = db.Column(db.Integer, db.ForeignKey('game_dad.id'))
    console = db.Column(db.Integer, db.ForeignKey('platform.id'))
    boxart = db.Column(db.String(256))
    thumbnail = db.Column(db.String(256))
    genre = db.Column(db.String(32))
    subgenre = db.Column(db.String(32))

    def boxart_url(self):
        return self.boxart 

    def __repr__(self):
        return '<Game %r>: %r' % (self.version_name, self.dad)

页面的 View 只是将整个对象(游戏)发送到页面。

到达页面的 url 是:

/home/removed_my_pc_user/app/media/boxart/image.jpg

编辑: 我才想起我在项目上使用的是虚拟环境。

和chmod有关系吗?

提前致谢!

最佳答案

嗯,这很奇怪,但我会回答我自己的问题。

解决方案很简单,我选择只将文件名存储在数据库中。

然后我创建了一个到 View 的路由,该 View 将使用 flask.ext.uploads

中的 send_from_directory 函数返回文件
@app.route('/boxart/<filename>')
    def uploaded_boxart(filename):
        return send_from_directory(app.config['UPLOAD_FOLDER'],filename)

因此,在模板中,我们可以使用 url_for() 函数加载文件,将存储在数据库中的文件名作为参数发送。

<img src="{{ url_for('uploaded_boxart', filename = game_son.boxart)}}" />

此外,我认为我的一个错误是将 media/ 文件夹放在 app/ 文件夹中,而不是放在根目录中。因此,我还重新配置了 app.config 中的 UPLOAD_FOLDER

关于python - Flask 和 sqlalchemy : Get uploaded file using path stored on database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237504/

相关文章:

python - 使用 python 和 flask 的多个 SQL 查询

python - Flask-Admin:同时在两个表中插入数据

python - Python Flask:获取和发布方法的不同render_template可能吗?

python - Flask-SQLAlchemy hybrid_property 中的多对多有序关系

python - 在 SQLAlchemy 中执行连接时出错 'Please specify the ' onclause' of this join explicitly'。

python - 修复几乎有效的 JSON 文件

Python:如何查找列中的哪些值在另一个特定列(数据帧)中具有 NaN 值

python - 如何停止 python Json 中的解码错误

python - 如何使用 Tornado 运行 Flask 应用程序

python - flask View 函数映射正在覆盖现有端点函数 : type