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!
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):