对Invenio的S3文件存储支持。

oarepo-s3的Python项目详细描述


oarepo-s3

imageimageimageimage

这个包建立在invenio-s3之上 该库提供与任何aws3restapi兼容的对象存储后端的集成。 除了invenio-s3之外,它还尝试最小化对 Invenio服务器端,尽可能使用直接访问S3存储后端 (Invenio服务器本身不处理多部分文件上载和下载)。在

安装

开始使用此库

  1. 在项目的venv中安装以下软件包:

    git clone https://github.com/CESNET/s3-client
    cd s3-client
    poetry install
    pip install oarepo-s3
    
  2. 在您选择的S3存储提供商上创建一个S3帐户和bucket。在

  3. 将S3访问配置放入Invenio服务器配置中(例如invenio.cfg):

    ^{pr2}$ 在
  4. 创建针对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)

  • 首次公开发行。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
eclipse如何将LWUIT主题文件加载到Java项目中?   JavaJPA HibernateFetchType。渴望和获取模式。加入非主键   java为单个和多个对象创建对象容器   java在到达末尾时在viewpager2中加载更多项目   java我怎么能忽略它。解压时存储DS_和MACOSX文件?   java我无法使用ApachePOI3.10读取xlsx文件   java为什么我在Android应用程序的webView中看到广告(我没有注册任何广告)   在Java中,PrintWriter write()方法在哪里写入数据   c#ProcessStartInfo挂在“WaitForExit”上?为什么?   安卓中的java解析查询问题   java Android摄像头在拍照时禁用   爪哇交货过早地从jsprit的仓库提货   java退避算法仿真   java我的计数反转算法有什么问题?   java什么导致一个类中的变量受到另一个类的影响?   JavaVaadin和Spring引导问题   java无法使用writerInterceptor拦截jersey资源方法   java如何根据配置选择RedisCluster、RedisStandalone和Sentinel连接?   java GSON/如何解析数字   java:字节码中的字符串concat转换为StringBuilder