def get_upload_foldername(file_name, upload_to='%Y/%m'): # Generate date based path to put uploaded file. file_field = FileField(upload_to=upload_to) if not file_name: file_name = 'no_name' filename = file_field.generate_filename(None, file_name) filename = re.sub(r'[_\-]+', '_', filename) if six.PY2 and isinstance(filename, unicode): filename = filename.encode('utf-8') root_dir = os.path.splitext(filename)[0] parent_dir, _, basename = root_dir.rpartition('/') image_dir = '' i = 1 dir_name = basename while not image_dir: try: sub_dirs, _ = default_storage.listdir(parent_dir) while dir_name in sub_dirs: dir_name = "%s-%d" % (basename, i) i += 1 except OSError: os.makedirs(os.path.join(settings.MEDIA_ROOT, parent_dir)) else: image_dir = os.path.join(parent_dir, dir_name) return image_dir
class VirtualFieldFile(FieldFile): def __init__(self, name, storage=None, upload_to=None): super(FieldFile, self).__init__(None, name) self.instance = None self.field = FileField(name='file', upload_to=upload_to, storage=storage) self.storage = self.field.storage self._committed = True def get_directory_name(self): return self.field.get_directory_name() def get_filename(self, filename): return self.field.get_filename(filename) def generate_filename(self, filename): return self.field.generate_filename(None, filename) def save(self, *args, **kwargs): raise NotImplementedError def delete(self, *args, **kwargs): raise NotImplementedError @cached_property def dimensions(self): try: close = self.closed self.open() return get_image_dimensions(self, close=close) except: return (0, 0) @cached_property def width(self): w, h = self.dimensions return w @cached_property def height(self): w, h = self.dimensions return h
class VirtualFieldFile(FieldFile): def __init__(self, name, storage=None, upload_to=None): super(FieldFile, self).__init__(None, name) self.instance = None self.field = FileField(name='file', upload_to=upload_to, storage=storage) self.storage = self.field.storage self._committed = True def get_directory_name(self): return self.field.get_directory_name() def get_filename(self, filename): return self.field.get_filename(filename) def generate_filename(self, filename): return self.field.generate_filename(None, filename) def save(self, *args, **kwargs): raise NotImplementedError def delete(self, *args, **kwargs): raise NotImplementedError @cached_property def dimensions(self): try: pil_image = PIL.Image.open(self.path) except: return (0, 0) else: return pil_image.size @cached_property def width(self): w, h = self.dimensions return w @cached_property def height(self): w, h = self.dimensions return h
def get_upload_foldername(file_name, upload_to='%Y/%m'): # Generate date based path to put uploaded file. file_field = FileField(upload_to=upload_to) if not file_name: file_name = 'no_name' filename = file_field.generate_filename(None, file_name) filename = re.sub(r'[_\-]+', '_', filename) if six.PY2 and isinstance(filename, unicode): filename = filename.encode('utf-8') root_dir = os.path.splitext(filename)[0] root_dir = dir_name = os.path.join(settings.MEDIA_ROOT, root_dir) i = 1 while os.path.exists(dir_name): if six.PY2: dir_name = b'%s-%d' % (root_dir, i) else: dir_name = '%s-%d' % (root_dir, i) i += 1 os.makedirs(dir_name) return dir_name