diff --git a/templates/upload_success.html b/templates/upload_success.html index 29016a5..a676a8c 100644 --- a/templates/upload_success.html +++ b/templates/upload_success.html @@ -5,7 +5,7 @@

Upload success!

-

QR Code link

+

QR Code link

diff --git a/uploadr.py b/uploadr.py index 180064c..3b1111b 100644 --- a/uploadr.py +++ b/uploadr.py @@ -1,7 +1,9 @@ +import os +import glob import time import flask -import os import qrcode +import urllib.parse from flask import Flask from flask import render_template from flask import request @@ -10,23 +12,33 @@ from config import uploadr as config from werkzeug.utils import secure_filename app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) +encode = urllib.parse.quote +decode = urllib.parse.unquote -if not os.path.isdir(config.uploads): - os.makedirs(config.uploads) +def check_create(dir): + if not os.path.isdir(dir): + os.makedirs(dir) -if not os.path.isdir(config.qrcodes): - os.makedirs(config.qrcodes) +check_create(config.uploads) +check_create(config.qrcodes) @app.route("/") @app.route('/upload', methods=['GET','POST']) def upload_file(): if request.method == 'POST': - f =request.files['file'] + f = request.files['file'] print(secure_filename(f.filename)) - filename = str(time.time()) + '.' + secure_filename(f.filename).split('.')[-1] - f.save('./uploads/' + filename) + filename = secure_filename(f.filename) + time_uploaded = str(time.time()) + file_dir = config.uploads + '/' + filename + check_create(file_dir) + check_create(file_dir + '/' + time_uploaded) + f.save(config.uploads + + '/' + encode(filename) + + '/' + time_uploaded + + '/' + filename) return render_template('upload_success.html', - filename = filename, + link = filename + '?version=' + time_uploaded, port = config.port, ) else: @@ -36,10 +48,11 @@ def upload_file(): @app.route('/qrcodes/') def qrcodes(filename): - link = 'http://{0}:{1}/download/{2}'.format( + link = 'http://{0}:{1}/download/{2}?version={3}'.format( config.domain , config.port - , filename + , encode(filename) + , request.args.get('version') ) image = qrcode.make(link) with open('qrcodes/' + filename+ '.png', mode = 'bw+') as file: @@ -48,19 +61,33 @@ def qrcodes(filename): @app.route('/qr/') def qr(filename=None): - return render_template('qr.html', imagesrc = 'http://{0}:{1}/qrcodes/{2}'.format( - config.domain - , config.port - , filename + return render_template('qr.html' + , imagesrc = 'http://{0}:{1}/qrcodes/{2}?version={3}'.format( + config.domain + , config.port + , filename + , request.args.get('version') + ) ) - ) @app.route('/download/') def download(filename=None): - if filename != None: - return flask.send_from_directory(config.uploads, filename, as_attachment=True) - else: - return hello() + provided_version = request.args.get('version') + directory_base = config.uploads + '/' + filename + '/' + directory = directory_base + str(provided_version) + print(directory) + print(os.path.isdir(directory)) + if not os.path.isdir(directory): + existing_versions = glob.glob(directory_base + '*') + print(existing_versions) + existing_versions.sort() + print(existing_versions) + latest_version = existing_versions[-1] + print(latest_version) + directory = latest_version + print(directory) + + return flask.send_from_directory(directory, decode(filename), as_attachment=True) @app.route('/css/') def css(filename=None):