Inspired by:
https://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html#storage
Interacting directly with storage backend
from django.conf import settings
from django.core.files.storage import get_storage_class
STORAGE_CLASS_STRING = getattr(settings, "MY_STORAGE_CLASS", \
settings.DEFAULT_FILE_STORAGE)
sc = get_storage_class(STORAGE_CLASS_STRING)
s = sc()
s.url("jjj-test/JOE.jpg")
# '/media/jjj-test/JOE.jpg'
s.path("jjj-test/JOE.jpg")
# u'/home/jjasinski/Sites/mysite/htdocs/media/jjj-test/JOE.jpg'
s.exists("jjj-test/JOE.jpg")
# False
f = s.open("jjj-test/JOE.jpg", 'w')
f.write("joe test")
f.close()
s.exists("jjj-test/JOE.jpg")
# True
s.delete("jjj-test/JOE.jpg")
s.exists("jjj-test/JOE.jpg")
# False
Interacting with a Model's storage
from django.core.files.base import ContentFile
obj = MyModel()
obj.photo.save('django_test.txt', ContentFile('content'))
obj.photo.size
obj.photo.read()
obj.delete()
Showing posts with label storage. Show all posts
Showing posts with label storage. Show all posts
Friday, March 04, 2016
Saturday, November 27, 2010
Django: Random Image/File Field name
By default, Django image/file fields place uploaded files in the MEDIA_ROOT directory, under a subdirectory given by the "upload_to" model field parameter. However, the name of uploaded file is the same name as the original filename uploaded by the client. The filename can be changed by creating a custom storage manager.
---- myapp/storage.py
import os, itertools, random, string
from django.core.files.storage import FileSystemStorage
def rand_key(size):
return "".join([random.choice(string.letters + string.digits)
for i in range(size)])
class RandomFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
file_root, file_ext = os.path.splitext(name)
return "%s%s" % (rand_key(32), file_ext)
def get_available_name(self, name):
dir_name, file_name = os.path.split(name)
file_root, file_ext = os.path.splitext(file_name)
count = itertools.count(1)
while self.exists(name):
name = os.path.join(dir_name, "%s_%s%s" % (
rand_key(32), count.next(), file_ext))
return name
---- myapp/storage.py
import os, itertools, random, string
from django.core.files.storage import FileSystemStorage
def rand_key(size):
return "".join([random.choice(string.letters + string.digits)
for i in range(size)])
class RandomFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
file_root, file_ext = os.path.splitext(name)
return "%s%s" % (rand_key(32), file_ext)
dir_name, file_name = os.path.split(name)
file_root, file_ext = os.path.splitext(file_name)
count = itertools.count(1)
while self.exists(name):
name = os.path.join(dir_name, "%s_%s%s" % (
rand_key(32), count.next(), file_ext))
return name
---- myapp/models.py
from django.db import models
from myapp.storage import RandomFileSystemStorage
class Photo(models.Model):
image = models.ImageField(upload_to='media',
storage=RandomFileSystemStorage())
storage=RandomFileSystemStorage())
Subscribe to:
Posts (Atom)
