Small application that simplifies naming of uploaded files
Project description
dj-upload-to
Synopsis
Small application that simplifies naming of uploaded files. License is MIT.
Installation
You can get dj-upload-to release version from pypi with pip:
$ pip install dj-upload-to
or development one from github:
$ pip install -e git+https://github.com/marazmiki/dj-upload-to#egg=dj-upload-url
You’re not need include it into your INSTALLED_APPS
Usage
Assumes you have model:
from django.db import models from dj_upload_to import UploadTo upload_to = UploadTo() class Model(models.Model): file = models.ImageField(upload_to=upload_to)
As you see, UploadTo generates callable object (with __call__ methodfor passing into upload_to attribute of FileField (see django upload_to docs for details)
When you save model with image originally named myphoto.JPG, file
will be saved with name such as:
model/ab/cd/abcdabcd-0123-4567-8901-234567890ab.jpg
where:
- model is prefix automatically generated from model class. You can override it
- ab is the first 2 char segment of filename
- cd is the second 2 char segment of filename
- abcdabcd-0123-4567-8901-234567890ab autogenerated with uuid filename
- .jpg is a lower cased extension taken from original file
Customize
You can customize behavior of UploadTo with options in constructor:
- prefix: prefix of filename. Default is dj_upload_to.not_provided. If None, prefix will be missed. If not explicitly set, will be generated automatically based on model class name
- num_seg: number of parts of segmentation. Default is 2
- seg_size: length of segment in chars. Default is 2
- save_name: use original name without autogeneration. Default is False
There are some examples:
>>> model_instance = Model() >>> # Disable prefix >>> UploadTo(prefix=None)(model_instance, 'file.jpg') 'c0/17/c01745b4-e70b-4dd8-a5f7-76fec32fcb83.jpg' >>> # Explicitly given prefix >>> UploadTo(prefix='my_files')(model_instance, 'file.jpg') u'my_files/d9/a4/d9a4ef25-11b0-41bb-a543-baaac6553024.jpg' >>> # Four segment and automatically generated prefix >>> UploadTo(num_seg=4)(model_instance, 'file.jpg') u'model/36/52/99/f6/365299f6-8dc5-4ca2-848d-965f002a9b72.jpg' >>> # Segment length is 4 chars >>> UploadTo(seg_size=4)(model_instance, 'file.jpg') u'model/3142/f2ef/3142f2ef-2680-4a99-82fc-3c8d9d3179dc.jpg' >>> # Save original filename >>> UploadTo(save_name=True)(model_instance, 'file.jpg') u'model/file.jpg' >>> # Save original filename without prefix >>> UploadTo(save_name=True, prefix=None)(model_instance, 'file.jpg') u'file.jpg'
Contributing
Ideas, bugfixes, pull requests are welcome on GitHub
CHANGELOG
1.0.1
- Add prefix disabling
- Add changelog
- Updated docs
1.0.0
Initial release