我正在尝试用flask构建和应用程序,我看过一些教程和书籍以及一些代码[1],他们解释了如何为数据库设置声明整数和字符串。但是,他们没有解释如何存储图像。我现在非常困惑,我认为存储图像的自然方式是在数据库上,但是阅读一些flask站点上的文档[2]文件系统是存储映像的地方。我只是在阅读flask开发书籍时做了一个第一假设,即使用largeBinary声明是正确的,但这只是我的猜测,你可以在下面的代码中看到。有人能帮我弄清楚吗?如果我问的不清楚,请让我知道。
Class User(Base):
__table__ = 'user'
id = Column(Integer, primary_key = True)
name Column(String(80), nullable=False)
email = Column(String(250), nullable=False)
image = Column(LargeBinary, nullable = True)
[1][https://github.com/lobrown/Full-Stack-Foundations/blob/master/Lesson_1/database_setup.py](https://github.com/lobrown/Full-Stack-Foundations/blob/master/Lesson_1/database_setup.py) [2] http://flask.pocoo.org/docs/0.10/patterns/fileuploads/
4条答案
按热度按时间von4xj4u1#
有一个叫做SQLAlchemy-ImageAttach的库,它提供了一种创建带有图像对象的实体的方法,这些实体可以通过url公开。
否则,您可以直接通过
SingleImageSet
类获得文件对象。使用库,您可以从两个存储中进行选择,如文件系统或Amazon的S3。在文档中有一个描述的示例(灰色框),说明如何预先定义存储,然后定义用户实体并拥有UserPicture实体。
我不知道Flask,但是也许你可以通过wsgi声明和这里的Lib一起使用一个文件存储器。我希望它能帮助你一点,给你一些**。
okxuctiv2#
我在这篇文章[1]中读到,最好的方法是将图像字段声明为一个字符串,以保存到图像的URL或链接,然后可以将图像存储在外部服务器中,与应用程序的服务器不同。所以如果有人有同样的疑问,只需将其声明为字符串,然后继续进行应用程序开发。对数据库管理系统有点失望的是,它们只能用于存储数字和字母数据(:p)。
[1][https://www.reddit.com/r/flask/comments/31tywp/afbest_way_to_store_avatars_images_etc/](https://www.reddit.com/r/flask/comments/31tywp/afbest_way_to_store_avatars_images_etc/)
qlfbtfca3#
如果你要散列你的图像文件,你可能想要用一个字符串来替换LargeBinary,然后你可以设置一个图像值,例如
假设图片保存为
thepicture.jpg
。j2cgzkjk4#
你不应该把大量的二进制数据(图像等)保存到数据库中。数据库不是设计用来存储文件的,所以你这样做只会破坏数据库的性能。
就像你已经推测的那样,更好的方法是将文件保存到磁盘上,然后将图像文件名存储到数据库中。额外的好处是,当你的应用程序变得更大时,你可以将图像存储到一些磁盘服务器或云或其他地方,所有的Web主机都可以从那里访问文件。
如果你愿意,你可以为你的图片找到一些好的文件夹结构,例如一个文件夹来存放个人资料图片等。但是对于现代的文件系统来说,这实际上一点也不重要。毕竟,你可能不需要手工管理这些文件,所以从磁盘中找到特定的文件并不重要。
编辑:我忘了提到,在某些时候,你可能想从其他服务器而不是动态 flask 应用程序来服务你的静态内容(图像,css,js文件)。如果你从一开始就考虑到这个想法来设计你的系统,将来的扩展会更容易。