Add feature to (mostly) presserve filenames with versioning

This commit is contained in:
alvierahman90 2017-10-29 17:35:00 +00:00
parent 1213158f6a
commit 922b11e3f4
2 changed files with 49 additions and 22 deletions

View File

@ -5,7 +5,7 @@
<body> <body>
<h1>Upload success!</h1> <h1>Upload success!</h1>
<div class="indent"> <div class="indent">
<p id="downloadLink" >File located at <a id="file_link" href="/download/{{ filename }}">/download/{{ filename }}<a> <p id="downloadLink" >File located at <a id="file_link" href="/download/{{ link }}">/download/{{ link }}<a>
<p><a href="/qr/{{ filename }}"> QR Code link </a> </p> <p><a href="/qr/{{ link }}"> QR Code link </a> </p>
</div> </div>
</body> </body>

View File

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