Add thumbnail support based on Dropbox design
Size implemented, Format still missing
This commit is contained in:
parent
ad5b7364d6
commit
7c68cb7fb4
@ -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']
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user