Flask-如何将多个图像上传到数据库并在网站上进行渲染

时间:2018-10-16 20:02:50

标签: python html database flask sqlalchemy

我有一个装有Flask的图像上传区。该区域还可以加载多个图像。最多有8张图片上传曲目。上传保存的图像后,我将它们放入文件中。我将它们再次上传的图像发布到网站上。我正在考虑在数据库中注册它,但是我不知道如何注册它。我想要带有输入文件的图片。上传了多少张图片,我不知道如何绘制这些图片。

简而言之,当用户保存已保存的图像时,我将其保留在文件中,并且希望将上传的图像保存到数据库中以便在我的网站上发布。我怎样才能做到这一点?我正在使用SQLalchemy。

HTML;

 <input id="files" name="files" type="file" multiple>

Python;

UPLOAD_FOLDER = 'static/uploads/'
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

class AlbumForm(Form):
    files = FileField(render_kw={'multiple': True})

#Album form
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route("/admin/fotografAlbumu", methods=["GET", "POST"])
def upload():
    form = AlbumForm(request.form)
    if request.method == 'POST' and 'files' in request.files:
        for f in request.files.getlist('files'):
            files = form.files.data
            username = session["username"]
            url=app.config['UPLOAD_FOLDER']+username
            f.save(os.path.join(url, f.filename))
        return render_template('/admin/galeri.html',form=form)
    return render_template('/admin/galeri.html',form=form)

@app.route('/uploaded_file/<path:filename>')
def uploaded_file(filename):
    print(filename)
    username = session["username"]
    url=app.config['UPLOAD_FOLDER']+username
    return send_from_directory(url, filename)

我认为数据库结构如下;

class Album(db.Model):
    albumid = db.Column(db.Integer, primary_key=True)
    userid = db.Column(db.Integer, db.ForeignKey('users.userid'))
    fotoOne = db.Column(db.String(80))
    fotoTwo = db.Column(db.String(80))
    fotoThree = db.Column(db.String(80))
    fotoFour = db.Column(db.String(80))
    fotoFive = db.Column(db.String(80))
    fotoSix = db.Column(db.String(80))
    fotoSeven = db.Column(db.String(80))
    fotoEight = db.Column(db.String(80))

1 个答案:

答案 0 :(得分:0)

要渲染图像,请获取相册,然后将图像作为属性访问,例如constructor( @Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef<ESignatureComponent>, ) { } onCloseClick(){ this.dialogRef.close(); } album.foto_one,等等:

album.foto_two

然后在@app.route('/show-album/<int:id>', methods=['GET', 'POST']) def show_album(id=None): try: album = Album.query.get(id) return render_template('album.html', album=album) except: abort(404) 中输入

album.html

您还可以将图像名称存储为数组,并按如下所示进行渲染:

<img src="{{ url_for('/static/uploads/album.foto_one }}">
<img src="{{ url_for('/static/uploads/album.foto_two }}">

然后在模板中遍历照片列表,而不是键入所有链接。

class Album(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    photos = db.Column(ARRAY(String))