File storage API
Getting the current storage class
Django provides two convenient ways to access the current storage class:
- class
DefaultStorage
[source] DefaultStorage
provideslazy access to the current default storage system as defined byDEFAULT_FILE_STORAGE
.DefaultStorage
usesget_storage_class()
internally.getstorage_class
(_import_path=None)[source]- Returns a class or module which implements the storage API.
When called without the import_path
parameter get_storage_class
will return the current default storage system as defined byDEFAULT_FILE_STORAGE
. If import_path
is provided,get_storage_class
will attempt to import the class or module from thegiven path and will return it if successful. An exception will beraised if the import is unsuccessful.
The FileSystemStorage class
- class
FileSystemStorage
(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)[source] The
FileSystemStorage
class implementsbasic file storage on a local filesystem. It inherits fromStorage
and provides implementationsfor all the public methods thereof.location
Absolute path to the directory that will hold the files.Defaults to the value of your
MEDIA_ROOT
setting.URL that serves the files stored at this location.Defaults to the value of your
MEDIA_URL
setting.The file system permissions that the file will receive when it issaved. Defaults to
FILE_UPLOAD_PERMISSIONS
.- The file system permissions that the directory will receive when it issaved. Defaults to
FILE_UPLOAD_DIRECTORY_PERMISSIONS
.
Note
The FileSystemStorage.delete()
method will not raisean exception if the given file name does not exist.
getcreated_time
(_name)[source]- Returns a
datetime
of the system's ctime, i.e.os.path.getctime()
. On some systems (like Unix), this is thetime of the last metadata change, and on others (like Windows), it'sthe creation time of the file.
The Storage class
- class
Storage
[source] - The
Storage
class provides astandardized API for storing files, along with a set of defaultbehaviors that all other storage systems can inherit or overrideas necessary.
Note
When methods return naive datetime
objects, the effective timezoneused will be the current value of os.environ['TZ']
; note that thisis usually set from Django's TIME_ZONE
.
delete
(name)[source]Deletes the file referenced by
name
. If deletion is not supportedon the target storage system this will raiseNotImplementedError
insteadexists
(name)[source]Returns
True
if a file referenced by the given name already existsin the storage system, orFalse
if the name is available for a newfile.getaccessed_time
(_name)[source]- Returns a
datetime
of the last accessed time of thefile. For storage systems unable to return the last accessed time thiswill raiseNotImplementedError
.
If USE_TZ
is True
, returns an aware datetime
,otherwise returns a naive datetime
in the local timezone.
getavailable_name
(_name, max_length=None)[source]- Returns a filename based on the
name
parameter that's free andavailable for new content to be written to on the target storagesystem.
The length of the filename will not exceed max_length
, if provided.If a free unique filename cannot be found, aSuspiciousFileOperation
exception will be raised.
If a file with name
already exists, an underscore plus a random7 character alphanumeric string is appended to the filename beforethe extension.
getcreated_time
(_name)[source]- Returns a
datetime
of the creation time of the file.For storage systems unable to return the creation time this will raiseNotImplementedError
.
If USE_TZ
is True
, returns an aware datetime
,otherwise returns a naive datetime
in the local timezone.
getmodified_time
(_name)[source]- Returns a
datetime
of the last modified time of thefile. For storage systems unable to return the last modified time thiswill raiseNotImplementedError
.
If USE_TZ
is True
, returns an aware datetime
,otherwise returns a naive datetime
in the local timezone.
getvalid_name
(_name)[source]Returns a filename based on the
name
parameter that's suitablefor use on the target storage system.generatefilename
(_filename)[source]- Validates the
filename
by callingget_valid_name()
andreturns a filename to be passed to thesave()
method.
The filename
argument may include a path as returned byFileField.upload_to
.In that case, the path won't be passed to get_valid_name()
butwill be prepended back to the resulting name.
The default implementation uses os.path
operations. Overridethis method if that's not appropriate for your storage.
listdir
(path)[source]Lists the contents of the specified path, returning a 2-tuple of lists;the first item being directories, the second item being files. Forstorage systems that aren't able to provide such a listing, this willraise a
NotImplementedError
instead.open
(name, mode='rb')[source]Opens the file given by
name
. Note that although the returned fileis guaranteed to be aFile
object, it might actually be somesubclass. In the case of remote file storage this means thatreading/writing could be quite slow, so be warned.path
(name)[source]The local filesystem path where the file can be opened using Python'sstandard
open()
. For storage systems that aren't accessible fromthe local filesystem, this will raiseNotImplementedError
instead.save
(name, content, max_length=None)[source]- Saves a new file using the storage system, preferably with the namespecified. If there already exists a file with this name
name
, thestorage system may modify the filename as necessary to get a uniquename. The actual name of the stored file will be returned.
The max_length
argument is passed along toget_available_name()
.
The content
argument must be an instance ofdjango.core.files.File
or a file-like object that can bewrapped in File
.
size
(name)[source]Returns the total size, in bytes, of the file referenced by
name
.For storage systems that aren't able to return the file size this willraiseNotImplementedError
instead.url
(name)[source]- Returns the URL where the contents of the file referenced by
name
can be accessed. For storage systems that don't support access by URLthis will raiseNotImplementedError
instead.