Skip to content

Instantly share code, notes, and snippets.

@FrancisLiang
Forked from greyli/app.py
Created July 19, 2019 03:54
Show Gist options
  • Save FrancisLiang/13342c51a7fceacb257bde4dd45ca34b to your computer and use it in GitHub Desktop.
Save FrancisLiang/13342c51a7fceacb257bde4dd45ca34b to your computer and use it in GitHub Desktop.

Revisions

  1. @greyli greyli created this gist Dec 22, 2016.
    59 changes: 59 additions & 0 deletions app.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    # -*- coding: utf-8 -*-
    import os
    import time
    import hashlib

    from flask import Flask, render_template, redirect, url_for, request
    from flask_uploads import UploadSet, configure_uploads, IMAGES, patch_request_class
    from flask_wtf import FlaskForm
    from flask_wtf.file import FileField, FileRequired, FileAllowed
    from wtforms import SubmitField

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'I have a dream'
    app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd() + '/static'

    photos = UploadSet('photos', IMAGES)
    configure_uploads(app, photos)
    patch_request_class(app) # set maximum file size, default is 16MB


    class UploadForm(FlaskForm):
    photo = FileField(validators=[FileAllowed(photos, u'Image Only!'), FileRequired(u'Choose a file!')])
    submit = SubmitField(u'Upload')


    @app.route('/', methods=['GET', 'POST'])
    def upload_file():
    form = UploadForm()
    if form.validate_on_submit():
    for filename in request.files.getlist('photo'):
    name = hashlib.md5('admin' + str(time.time())).hexdigest()[:15]
    photos.save(filename, name=name + '.')
    success = True
    else:
    success = False
    return render_template('index.html', form=form, success=success)


    @app.route('/manage')
    def manage_file():
    files_list = os.listdir(app.config['UPLOADED_PHOTOS_DEST'])
    return render_template('manage.html', files_list=files_list)


    @app.route('/open/<filename>')
    def open_file(filename):
    file_url = photos.url(filename)
    return render_template('browser.html', file_url=file_url)


    @app.route('/delete/<filename>')
    def delete_file(filename):
    file_path = photos.path(filename)
    os.remove(file_path)
    return redirect(url_for('manage_file'))


    if __name__ == '__main__':
    app.run(debug=True)
    9 changes: 9 additions & 0 deletions browser.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,9 @@
    <!DOCTYPE html>
    <title>File Browser</title>
    <h1>File Browser</h1>
    <a href="{{ url_for('upload_file') }}">Upload</a> /
    <a href="{{ url_for('manage_file') }}">Manage</a>
    <hr>

    <p>URL: {{ file_url }}</p>
    <img src="{{ file_url }}">
    20 changes: 20 additions & 0 deletions index.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    <!DOCTYPE html>
    <title>Upload File</title>
    <h1>Upload File</h1>
    <a href="{{ url_for('upload_file') }}">Upload</a> /
    <a href="{{ url_for('manage_file') }}">Manage</a>
    <hr>

    <form method="POST" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    {{ form.photo(multiple="multiple")}}
    {% for error in form.photo.errors %}
    <span style="color: red;">{{ error }}</span>
    {% endfor %}
    {{ form.submit }}
    </form>

    {% if success %}
    <br>
    <p>Upload Success!</p>
    {% endif %}
    12 changes: 12 additions & 0 deletions manage.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    <!DOCTYPE html>
    <title>File Manager</title>
    <h1>File Manager</h1>
    <a href="{{ url_for('upload_file') }}">Upload</a> /
    <a href="{{ url_for('manage_file') }}">Manage</a>
    <hr>

    {% for photo in files_list %}
    - {{ photo }}
    <a href="{{ url_for('open_file', filename=photo) }}">open</a>
    <a href="{{ url_for('delete_file', filename=photo) }}">del</a><br>
    {% endfor %}