comparison core/image_uploader.py @ 885:ee47122d6277

Base64 encode uploaded filenames to make them shorter.
author Brian Neal <bgneal@gmail.com>
date Tue, 27 Jan 2015 18:29:01 -0600
parents 234726f5a47a
children 51a2051588f5
comparison
equal deleted inserted replaced
884:4dd7e1b5efe8 885:ee47122d6277
1 """This module contains a function to upload an image file to a S3Bucket. 1 """This module contains a function to upload an image file to a S3Bucket.
2 2
3 The image can be resized and a thumbnail can be generated and uploaded as well. 3 The image can be resized and a thumbnail can be generated and uploaded as well.
4 4
5 """ 5 """
6 from base64 import b64encode
6 import logging 7 import logging
7 from io import BytesIO 8 from io import BytesIO
8 import os.path 9 import os.path
9 import tempfile 10 import tempfile
10 import uuid 11 import uuid
14 from core.functions import temp_open 15 from core.functions import temp_open
15 from core.image import orient_image 16 from core.image import orient_image
16 17
17 18
18 logger = logging.getLogger(__name__) 19 logger = logging.getLogger(__name__)
20
21
22 def make_key():
23 """Generate a random key suitable for a filename"""
24 return b64encode(uuid.uuid4().bytes, '-_').rstrip('=')
19 25
20 26
21 def upload(fp, bucket, metadata=None, new_size=None, thumb_size=None): 27 def upload(fp, bucket, metadata=None, new_size=None, thumb_size=None):
22 """Upload an image file to a given S3Bucket. 28 """Upload an image file to a given S3Bucket.
23 29
52 # problematic because the file is often an in-memory file if it is under 58 # problematic because the file is often an in-memory file if it is under
53 # a certain size. This complicates matters and many of the operations we try 59 # a certain size. This complicates matters and many of the operations we try
54 # to perform on it fail if this is the case. To get around these issues, 60 # to perform on it fail if this is the case. To get around these issues,
55 # we make a copy of the file on the file system and operate on the copy. 61 # we make a copy of the file on the file system and operate on the copy.
56 # First generate a unique name and temporary file path. 62 # First generate a unique name and temporary file path.
57 unique_key = uuid.uuid4().hex 63 unique_key = make_key()
58 ext = os.path.splitext(fp.name)[1] 64 ext = os.path.splitext(fp.name)[1]
59 temp_name = os.path.join(tempfile.gettempdir(), unique_key + ext) 65 temp_name = os.path.join(tempfile.gettempdir(), unique_key + ext)
60 66
61 # Write the UploadedFile to a temporary file on disk 67 # Write the UploadedFile to a temporary file on disk
62 with temp_open(temp_name, 'wb') as temp_file: 68 with temp_open(temp_name, 'wb') as temp_file: