django 1.8 官方文档翻译: 3-3-3 文件储存API

简介: 文件储存API获取当前的储存类Django提供了两个便捷的方法来获取当前的储存类:class DefaultStorage[source]DefaultStorage 提供对当前的默认储存系统的延迟访问,像DEFAULT_FILE_STORAGE中定义的那样。

文件储存API

获取当前的储存类

Django提供了两个便捷的方法来获取当前的储存类:

class DefaultStorage[source]

DefaultStorage 提供对当前的默认储存系统的延迟访问,像DEFAULT_FILE_STORAGE中定义的那样。DefaultStorage 内部使用了get_storage_class()

get_storage_class([import_path=None])[source]

返回实现储存API的类或者模块。

当没有带着import_path 参数调用的时候, get_storage_class 会返回当前默认的储存系统,像DEFAULT_FILE_STORAGE中定义的那样。如果提供了import_pathget_storage_class会尝试从提供的路径导入类或者模块,并且如果成功的话返回它。如果导入不成功会抛出异常。

FileSystemStorage类

class FileSystemStorage([location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None])[source]

FileSystemStorage类在本地文件系统上实现了基本的文件存储功能。它继承自Storage ,并且提供父类的所有公共方法的实现。

location

储存文件的目录的绝对路径。默认为MEDIA_ROOT设置的值。

base_url

在当前位置提供文件储存的URL。默认为MEDIA_URL设置的值。

file_permissions_mode

文件系统的许可,当文件保存时会接收到它。默认为FILE_UPLOAD_PERMISSIONS

New in Django 1.7:

新增了file_permissions_mode属性。之前,文件总是会接收到FILE_UPLOAD_PERMISSIONS许可。

directory_permissions_mode

文件系统的许可,当目录保存时会接收到它。默认为FILE_UPLOAD_DIRECTORY_PERMISSIONS

New in Django 1.7:

新增了directory_permissions_mode属性。之前,目录总是会接收到FILE_UPLOAD_DIRECTORY_PERMISSIONS许可。

注意

FileSystemStorage.delete()在提供的文件名称不存在的时候并不会抛出任何异常。

Storage类

class Storage[source]

Storage类为文件的存储提供了标准化的API,并带有一系列默认行为,所有其它的文件存储系统可以按需继承或者复写它们。

注意

对于返回原生datetime对象的方法,所使用的有效时区为os.environ['TZ']的当前值。要注意它总是可以通过Django的TIME_ZONE来设置。

accessed_time(name)[source]

返回包含文件的最后访问时间的原生datetime对象。对于不能够返回最后访问时间的储存系统,会抛出NotImplementedError异常。

created_time(name)[source]

返回包含文件创建时间的原生datetime对象。对于不能够返回创建时间的储存系统,会抛出NotImplementedError异常。

delete(name)[source]

删除name引用的文件。如果目标储存系统不支持删除操作,会抛出NotImplementedError异常。

exists(name)[source]

如果提供的名称所引用的文件在文件系统中存在,则返回True,否则如果这个名称可用于新文件,返回False

get_available_name(name, max_length=None)[source]

返回基于name参数的文件名称,它在目标储存系统中可用于写入新的内容。

如果提供了max_length,文件名称长度不会超过它。如果不能找到可用的、唯一的文件名称,会抛出SuspiciousFileOperation 异常。

如果name命名的文件已存在,一个下划线加上随机7个数字或字母的字符串会添加到文件名称的末尾,扩展名之前。

Changed in Django 1.7:

之前,下划线和一位数字(比如"_1""_2",以及其他)会添加到文件名称的末尾,直到目标目录中发现了可用的名称。一些恶意的用户会利用这一确定性的算法来进行dos攻击。这一变化也在1.6.61.5.9, 和 1.4.14中出现。
Changed in Django 1.8:

新增了max_length参数。

get_valid_name(name)[source]

返回基于name参数的文件名称,它适用于目标储存系统。

listdir(path)[source]

列出特定目录的所有内容,返回一个包含2元组的列表;第一个元素是目录,第二个是文件。对于不能够提供列表功能的储存系统,抛出NotImplementedError异常。

modified_time(name)[source]

返回包含最后修改时间的原生datetime对象。对于不能够返回最后修改时间的储存系统,抛出NotImplementedError异常。

open(name, mode='rb')[source]

通过提供的name打开文件。注意虽然返回的文件确保为File对象,但可能实际上是它的子类。在远程文件储存的情况下,这意味着读写操作会非常慢,所以警告一下。

path(name)[source]

本地文件系统的路径,文件可以用Python标准的open()在里面打开。对于不能从本地文件系统访问的储存系统,抛出NotImplementedError异常。

save(name, content, max_length=None)[source]

使用储存系统来保存一个新文件,最好带有特定的名称。如果名称为 name的文件已存在,储存系统会按需修改文件名称来获取一个唯一的名称。返回被储存文件的实际名称。

max_length参数会传递给get_available_name()

content参数必须为django.core.files.File或者File子类的实例。

Changed in Django 1.8:

新增了max_length参数。

size(name)[source]

返回name所引用的文件的总大小,以字节为单位。对于不能够返回文件大小的储存系统,抛出NotImplementedError异常。

url(name)[source]

返回URL,通过它可以访问到name所引用的文件。对于不支持通过URL访问的储存系统,抛出NotImplementedError异常。

译者:Django 文档协作翻译小组,原文:Storage API

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

相关文章
|
4月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
252 1
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
337 2
|
5月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
8月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
11月前
|
API 开发者 UED
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
通过学习API 13,我深入研究了**PreviewKit(文件预览服务)**。该模块支持快速预览多种文件类型(文本、图片、视频、音频、PDF等),为文件管理类应用提供系统级支持。本文分享了从搭建开发环境到实现单文件和多文件预览的全过程,并介绍了如何构建一个实用的文件预览助手应用。通过实践,不仅掌握了技术细节,还提升了个人开发能力。希望这些经验能为其他开发者带来启发与帮助。
255 10
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
JSON API 网络架构
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
463 2
|
API 数据库 数据安全/隐私保护
Django配置api、管理系统和视图
Django配置api、管理系统和视图
307 1