2015-05-14 68 views
6

我正在使用烧瓶和sqlalchemy,我遇到了有关文件上传的问题。烧瓶和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) 

页的视图只是给整个对象(游戏)的页面之前,解析字符串。

是在页面上到达的网址是:

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

编辑: 我只记得,我使用的是项目上的虚拟环境。

它与chmod有关吗?

在此先感谢!

+0

你的代码在你的模板中显示图像在哪里?你如何从数据库中获取数据?你已经提供了插入语句,但这不能帮助我们解决你的问题,它不会在图像标签中显示。 – CodeLikeBeaker

+0

谢谢。我在问题中增加了更多信息。如果还有别的东西,告诉我。 – Felipe

+0

当您查看源代码时,您的img标签的src是什么? – CodeLikeBeaker

回答

1

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

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

然后创建一个视图的路线将从flask.ext.uploads

@app.route('/boxart/<filename>') 
    def uploaded_boxart(filename): 
     return send_from_directory(app.config['UPLOAD_FOLDER'],filename) 

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

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

而且,我认为,我的错误之一是把媒体/文件夹中的应用程序/文件夹内,而不是根目录里面。所以我也在app.config中重新配置了UPLOAD_FOLDER

相关问题