跳转到主要内容

用于在Web应用程序中存储文件和附件的工具包

项目描述

https://raw.github.com/amol-/depot/master/docs/_static/logo.png

DEPOT - 简单的文件存储

https://github.com/amol-/depot/actions/workflows/run-tests.yml/badge.svg https://coveralls.io/repos/amol-/depot/badge.png?branch=master https://img.shields.io/pypi/v/filedepot.svg

DEPOT是一个框架,用于在Python2.6+和Python3.2+上轻松存储和提供Web应用程序中的文件。

DEPOT支持在多个后端中存储文件,例如

  • 本地磁盘

  • 内存中(用于测试)

  • GridFS上

  • Amazon S3(或兼容服务)上

  • Google Cloud Storage上

并通过与数据库集成,为您的SQLAlchemy或Ming/MongoDB模型提供附件,同时考虑事务行为(文件也会回滚)。

安装

可以从PyPi本身通过安装filedepot发行版来安装DEPOT

$ pip install filedepot

入门

要开始使用Depot,请参阅文档

DEPOT于2014年在PyConUK和PyConFR上展出

独立

以下是一个使用depot独立存储MongoDB上文件的简单示例

from depot.manager import DepotManager

# Configure a *default* depot to store files on MongoDB GridFS
DepotManager.configure('default', {
    'depot.backend': 'depot.io.gridfs.GridFSStorage',
    'depot.mongouri': 'mongodb://localhost/db'
})

depot = DepotManager.get()

# Save the file and get the fileid
fileid = depot.create(open('/tmp/file.png'))

# Get the file back
stored_file = depot.get(fileid)
print stored_file.filename
print stored_file.content_type

模型

或者您可以使用depot与SQLAlchemy一起存储附件

from depot.fields.sqlalchemy import UploadedFileField
from depot.fields.specialized.image import UploadedImageWithThumb


class Document(Base):
    __tablename__ = 'document'

    uid = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(Unicode(16), unique=True)
    content = Column('content_col', UploadedFileField)  # plain attached file

    # photo field will automatically generate thumbnail
    photo = Column(UploadedFileField(upload_type=UploadedImageWithThumb))


# Store documents with attached files, the source can be a file or bytes
doc = Document(name=u'Foo',
            content=b'TEXT CONTENT STORED AS FILE',
            photo=open('/tmp/file.png'))
DBSession.add(doc)
DBSession.flush()

# DEPOT is session aware, commit/rollback to keep or delete the stored files.
DBSession.commit()

变更日志

0.11.0

  • 官方支持Python 3.12

  • 解决了Pillow中Image.ANTIALIAS的弃用问题,改用Image.LANCZOS

  • TurboGears2不再需要运行测试

  • Depot现在与multipart模块或其他cgi.FieldStorage的替代品兼容

  • 修复了UploadedImageWithThumb中的文件泄露问题

  • 修复了在WithThumbnailFilter中的文件泄露问题

0.10.0

  • 增加了对Google Cloud Storage的支持

  • 修复了与S3的ACL问题

  • 弃用boto2后端,使用boto3

  • 增加了通过复制到另一个存储来执行备份的支持

0.9.0

  • 支持SQLAlchemy 1.4和2.0

  • 支持使用.delete(synchronize_session="fetch")删除的SQLAlchemy对象

  • 测试迁移到unittest

0.8.0

  • unidecode依赖项替换为anyascii以更好地应对MIT许可证。

0.7.1

  • 修复了AWS-S3支持中对Unicode文件名的bug。

0.7.0

  • depot.io.boto3.S3Storage后端中增加了对storage_class选项的支持。默认为STANDARD

0.6.0

  • 正式支持Python 3.7

  • 修复了DEPOT错误地响应以mountpoint开头的任何URL的请求。(例如:对于/depot挂载点,错误地响应了/depotsomething

  • 在SQLAlchemy中正确处理通过Relationship.remove(例如:parent.children.remove(X))删除的对象

  • 在SQLAlchemy中正确处理通过cascade='delete-orphan'删除的实体

0.5.2

  • 修复了在支持公共URL的存储中,start_response被多次调用而没有提供exc_info的错误

0.5.1

  • DepotMiddleware生成的URL现在保证是纯ASCII

  • [重大变更]:对于S3存储中已存在的存储桶,现在应该更可靠,但需要额外的AWS策略:s3:ListAllMyBuckets,这在0.5.0版本中不是必需的

0.5.0

  • depot.io.boto3.S3Storage现在提供通过boto3访问S3的支持。之前存在的depot.io.awss3.S3Storage仍可用于使用boto在S3上存储文件。

  • SQLAlchemy集成现在在会话未刷新时处理回滚时的文件删除。以前在回滚之前需要刷新会话。

  • 现在可以通过tox运行测试,并通过tox -e docs构建文档

  • DEPOT现在针对Python 3.6进行测试

0.4.1

  • 修复了在非UTF-8系统上的安装错误

  • 改进了SQLAlchemy中对多态子类型的支持

0.4.0

  • 支持Python 3.5

  • 修复了包含逗号的文件名的Content-Disposition

0.3.2

  • MemoryFileStorage现在接受任何选项,以便更容易地进行测试配置

0.3.1

  • 在直接从S3提供服务时修复了Content-Disposition

  • 修复了在Oracle上SQLAlchemy字段的尺寸(大于允许的最大值)

0.3.0

  • MemoryFileStorage为文件提供内存存储。这是为了提供一个方便的方式来加速测试套件并避免固定设施的清理问题。

  • S3Storage现在可以为私有文件生成公共URL(有效期1年)

  • 从纯字节创建的文件现在命名为“unnamed”,而不是缺少文件名。

0.2.1

  • S3Storage现在支持prefix选项,用于在子路径中存储文件

0.2.0

  • 存储现在提供了一个list方法来列出存储上可用的文件(这不是用来检索depot上传的文件,因为它列出所有文件)。

  • DepotExtension for Ming现在有适当的文档

0.1.2

  • 现在可以使用多个WithThumbnailFilter来生成具有不同分辨率的多个缩略图。

  • 对MongoDB UploadedFileProperty的文档进行了改进

0.1.1

  • 修复了当将UploadedFileProperty作为类属性访问时的Ming支持中的bug

  • 在MongoDB中使用时,TurboGears管理器内对DEPOT的支持得到了改进

0.1.0

  • 添加了 DepotManager.alias 以配置存储别名。这允许通过切换别名指向的位置,轻松地从一种存储迁移到另一种存储。

  • 现在 UploadedFileField 允许指定 upload_storage 将模型列链接到特定存储。

  • S3Storage 添加了 policyencrypt_key 选项,以上传私有和加密文件。

0.0.6

  • S3Storage 添加了 host 选项,允许使用与 AWS 不同的提供商。

0.0.5

  • 添加了 FileIntent 以显式提供上传内容的 content_typefilename

0.0.4

  • 在 WSGI 中间件中添加了包含原始文件名的 Content-Disposition 头部。

0.0.3

  • 针对 Waitress WSGI 服务器提供的 wsgi.file_wrapper 问题的工作绕过。

0.0.2

  • 对 Python3 上的 AWS S3 的官方支持。

项目详情


下载文件

下载适合您平台文件的版本。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

filedepot-0.11.0.tar.gz (43.2 kB 查看哈希值)

上传时间

由以下机构支持