文件存储API

本文介绍了Django提供的访问当前存储类的方法。详细阐述了DefaultStorage类对默认存储系统的延迟访问,FileSystemStorage类实现本地文件系统存储及相关参数,还介绍了Storage类提供的存储文件的标准化API,包括删除、检查存在等多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django提供了两种方便的方法来访问当前的存储类

DefaultStorage 类

  • DefaultStorage提供对当前默认存储系统的延迟访问 DEFAULT_FILE_STORAGE。DefaultStorage在get_storage_class()内部使用 。
  • get_storage_class(import_path = None)返回实现存储API的类或模块。在没有import_path参数get_storage_class 的情况下调用时,将返回当前默认的存储系统 DEFAULT_FILE_STORAGE。如果import_path提供, get_storage_class将尝试从给定路径导入类或模块,并在成功时返回它。如果导入失败,将引发异常。

FileSystemStorage 类

classFileSystemStorage(location = None,base_url = None,file_permissions_mode = None,directory_permissions_mode = None)
在FileSystemStorage类实现对本地文件系统的基本文件存储。它继承 Storage并提供其所有公共方法的实现。

  • location
    保存文件的目录的绝对路径。默认为您的MEDIA_ROOT设置值。

  • base_url
    提供存储在此位置的文件的URL。默认为您的MEDIA_URL设置值。

  • file_permissions_mode
    保存文件时文件系统权限。默认为FILE_UPLOAD_PERMISSIONS。

  • directory_permissions_mode
    保存目录时将接收的文件系统权限。默认为FILE_UPLOAD_DIRECTORY_PERMISSIONS。

  • get_created_time(name)
    返回系统的datetime.ctime,即 os.path.getctime()。在某些系统(如Unix)上,这是最后一次元数据更改的时间,而在其他系统(如Windows)上,则是文件的创建时间。

Storage类

Storage类提供用于存储文件,使用一组所有其他存储系统可以继承或根据需要覆盖默认的行为以及API进行了标准化。

  • delete(name)
    删除引用的文件name。如果不支持的目标存储系统上的缺失,这将引发NotImplementedError。

  • exists(name)
    如果给定的名称引用的文件在存储系统中已经存在返回True。

  • get_accessed_time(name)
    返回datetime文件的上次访问时间。对于无法返回上次访问时间的存储系统,这将引发NotImplementedError。

    如果USE_TZ是True,则返回一个知晓的datetime,否则datetime在本地时区返回一个TZ。

  • get_available_name(name,max_length = None)
    根据name可用于在目标存储系统上写入新内容的参数返回文件名。

    文件名的长度不会超过max_length提供。如果找不到空闲的唯一文件名, 则会引发异常SuspiciousFileOperation。

    如果文件name已存在,则在扩展名之前将下划线加上随机的7个字符的字母数字字符串附加到文件名。

  • get_created_time(name)
    返回datetime文件的创建时间。对于无法返回创建时间的存储系统,这将引发 NotImplementedError。

    如果USE_TZ是True,则返回一个datetime,否则datetime在本地时区返回一个TZ。

  • get_modified_time(name)
    返回datetime文件的上次修改时间。对于无法返回上次修改时间的存储系统,这将引发NotImplementedError。

    如果USE_TZ是True,则返回一个知晓的datetime,否则datetime在本地时区返回一个TZ。

  • get_valid_name(name)
    根据name适合在目标存储系统上使用的参数返回文件名。

  • generate_filename(filename)
    filename通过调用验证get_valid_name()并返回要传递给save()方法的文件名。

    该filename参数可能包括路径被返回的 FileField.upload_to。在这种情况下,路径将不会传递给路径,get_valid_name()但会先添加回结果名称。

    默认实现使用os.path操作。如果这不适合您的存储,请重写此方法。

  • listdir(path)
    列出指定路径的内容,返回2元组列表; 第一项是目录,第二项是文件。对于无法提供此类列表的存储系统,这将引发NotImplementedError相反的情况。

  • open(name,mode =‘rb’)
    打开给定的文件name。请注意,虽然返回的文件保证是一个File对象,但它实际上可能是某个子类。在远程文件存储的情况下,这意味着读/写可能非常慢,因此请注意。

  • path(name)
    可以使用Python标准打开文件的本地文件系统路径open()。对于无法从本地文件系统访问的存储系统,这将引发NotImplementedError。

  • save(name,content,max_length = None)
    使用存储系统保存新文件,最好使用指定的名称。如果已存在具有此名称的文件name,则存储系统可以根据需要修改文件名以获取唯一名称。将返回存储文件的实际名称。

    这个max_length被传递给了 get_available_name()。

    所述content参数必须是实例 django.core.files.File或可以包装在一个类文件对象File。

  • size(name)
    返回引用的文件的总大小(以字节为单位)。对于无法返回文件大小的存储系统,这将会引发NotImplementedError。

  • url(name)
    返回可以访问所引用文件内容的URL 。对于不支持通过URL访问的存储系统,这将会引发NotImplementedError。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值