Add thumbnail support based on Dropbox design

Size implemented, Format still missing
This commit is contained in:
gabriel 2015-05-06 13:06:23 -03:00
parent ad5b7364d6
commit 7c68cb7fb4
2 changed files with 57 additions and 1 deletions

View File

@ -5,12 +5,67 @@ from flask import request
from application import app from application import app
from PIL import Image
file_server = Blueprint('file_server', __name__, file_server = Blueprint('file_server', __name__,
template_folder='templates', template_folder='templates',
static_folder='static/storage') static_folder='static/storage')
@file_server.route('/file/thumbnail/<file_name>')
def thumbnail(file_name=None):
folder_name = file_name[:2]
file_folder_path = os.path.join(app.config['FILE_STORAGE'],
folder_name)
# The original file exists?
file_path = os.path.join(file_folder_path, file_name)
if not os.path.isfile(file_path):
return "", 404
format_ = "jpeg"
formats = ["jpeg", "png"]
size = "s"
sizes = ["xs", "s", "m", "l", "xl"]
size_dict= {
"xs": (32, 32),
"s": (64, 64),
"m": (128, 128),
"l": (640, 480),
"xl": (1024, 768)
}
if "format" in request.args:
if request.args['format'] in formats:
format_ = request.args['format']
if "size" in request.args:
if request.args['size'] in sizes:
size = request.args['size']
# The Thumbnail already exist?
thumbnail_folder_path = os.path.join(file_folder_path, size)
thumbnail_file_path = os.path.join(thumbnail_folder_path, file_name)
if os.path.isfile(thumbnail_file_path):
file_static_path = os.path.join("", folder_name, size, file_name)
return file_server.send_static_file(file_static_path)
# Create thumbnail
if not os.path.exists(thumbnail_folder_path):
os.mkdir(thumbnail_folder_path)
if not os.path.isfile(thumbnail_file_path):
try:
im = Image.open(file_path)
except IOError:
return "", 500
im.thumbnail(size_dict[size])
try:
im.save(thumbnail_file_path)
except IOError:
raise
return "", 500
file_static_path = os.path.join("", folder_name, size, file_name)
return file_server.send_static_file(file_static_path)
return "", 500
@file_server.route('/file', methods=['POST']) @file_server.route('/file', methods=['POST'])
@file_server.route('/file/<file_name>') @file_server.route('/file/<file_name>')
def index(file_name=None): def index(file_name=None):
@ -18,7 +73,6 @@ def index(file_name=None):
if file_name: if file_name:
folder_name = file_name[:2] folder_name = file_name[:2]
file_path = os.path.join("", folder_name, file_name) file_path = os.path.join("", folder_name, file_name)
print (file_path)
return file_server.send_static_file(file_path) return file_server.send_static_file(file_path)
#POST file #POST file
file_name = request.form['name'] file_name = request.form['name']

View File

@ -6,8 +6,10 @@ Flask-PyMongo==0.3.0
Flask-Script==2.0.5 Flask-Script==2.0.5
Jinja2==2.7.3 Jinja2==2.7.3
MarkupSafe==0.23 MarkupSafe==0.23
Pillow==2.8.1
Werkzeug==0.10.1 Werkzeug==0.10.1
argparse==1.2.1 argparse==1.2.1
distribute==0.6.24
itsdangerous==0.24 itsdangerous==0.24
pymongo==2.8 pymongo==2.8
requests==2.6.0 requests==2.6.0