对Invenio的S3文件存储支持。
oarepo-s3的Python项目详细描述
oarepo-s3
这个包建立在invenio-s3之上 该库提供与任何aws3restapi兼容的对象存储后端的集成。 除了invenio-s3之外,它还尝试最小化对 Invenio服务器端,尽可能使用直接访问S3存储后端 (Invenio服务器本身不处理多部分文件上载和下载)。在
安装
开始使用此库
- 在
在项目的venv中安装以下软件包:
git clone https://github.com/CESNET/s3-client cd s3-client poetry install pip install oarepo-s3
在 - 在
在您选择的S3存储提供商上创建一个S3帐户和bucket。在
在 - 在
将S3访问配置放入Invenio服务器配置中(例如
^{pr2}$ 在invenio.cfg
): - 在
创建针对S3存储桶的Invenio文件位置
invenio files location --default 'default-s3' s3://oarepo-bucket
在
使用
要将此库用作项目中的Invenio文件存储,请放置以下内容 在Invenio服务器配置中:
FILES_REST_STORAGE_FACTORY='oarepo_s3.storage.s3_storage_factory'
此存储重写来自InvenioS3
存储的save()
方法并添加
direct S3多部分上传的可能性。所有其他功能
由底层InvenioS3
存储库处理。在
直接多部分上传
要创建到S3后端的直接多部分上载,应该提供一个
赋值时,MultipartUpload
的实例,而不是通常的stream
某一记录的文件,如:
fromoarepo_s3.apiimportMultipartUploadfiles=record.files# Record instance FilesIteratormu=MultipartUpload(key='filename',base_uri=files.bucket.location.uri,expires=3600,size=1024*1024*1000,# total file sizepart_size=None,# completion resources as registered in blueprints, see belowcomplete_url='/records/1/files/filename/multipart-complete',abort_url='/records/1/files/filename/multipart-abort')# Assigning a MultipartUpload to the FilesIterator here will# trigger the multipart upload creation on the S3 storage backend.files['test']=mu
这将配置传入的MultipartUpload
实例
任何上传客户端处理和
完成上传。多部分上传会话配置
可以在MultipartUpload.session
字段下找到。在
在
uploader客户端将所有部件上传到S3后端,
需要在中注册oarepo_s3.views
中提供的资源
应用程序蓝图:
defmultipart_actions(code,files,rest_endpoint,extra,is_draft):# rest path -> viewreturn{'files/<key>/complete-multipart':MultipartUploadCompleteResource.as_view(MultipartUploadCompleteResource.view_name.format(endpoint=code)),'files/<key>/abort-multipart':MultipartUploadAbortResource.as_view(MultipartUploadAbortResource.view_name.format(endpoint=code))}
OARepo记录草案整合
此库与oarepo-records-draft配合使用效果最佳 图书馆。当集成到草稿端点时,不需要手动 向蓝图注册完成资源。创建多部分上载 也会自动处理。在
要设置草稿集成,只需运行以下命令:
pip install oarepo-records-draft oarepo-s3
并根据库的自述文件配置草稿端点。 这样,将在草稿上自动注册以下文件API操作 终结点:
创建多部分上载
POST /draft/records/<pid>/files/?multipart=True
{
"key": "filename.txt",
"multipart_content_type": "text/plain",
"size": 1024
}
完成多部分上传
POST /draft/records/<pid>/files/<key>/complete-multipart
{
"parts": [{"ETag": <uploaded_part_etag>, PartNum: <part_num>},...]
}
中止多部分上载
POST /draft/records/<pid>/files/<key>/abort-multipart
任务
此库提供一个任务,用于查找过期的正在进行的 无法完成的文件上载并将其删除 从关联记录的存储桶中,在 Celery cron schedule,在Invenio服务器配置中进行如下配置:
CELERY_BEAT_SCHEDULE={'cleanup_expired_multipart_uploads':{'task':'oarepo_s3.tasks.cleanup_expired_multipart_uploads','schedule':timedelta(minutes=60),},...}
。。 版权所有(C)2020 CESNET oarepo-s3是自由软件;您可以重新发布和/或修改它 在麻省理工学院许可的条款下;查看许可证文件了解更多细节。在
变更
版本1.0.3(于2020年4月25日发布)
- 允许多部分上载的动态部件大小。在
- 添加新的配置变量以定义默认零件尺寸和最大尺寸 零件数量。在
版本1.0.2(发布日期:2020-02-17)
- 修复了配置变量和缓存属性上的错误。在
- 将AWS区域名称和签名版本添加到配置中。在
版本1.0.1(发布日期:2019-01-23)
- URL过期的新配置变量。在
- 增强文件服务。在
- 取消固定Boto3库。在
- 修正了测试套件的配置。在
版本1.0.0(发布日期:2018-09-19)
- 首次公开发行。在
- 项目
标签: