Oracle Cloud 甲骨文云对象存储 ObjectStorage API(OCI)详细使用说明

小助手读文章 00:00 / 00:00

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

前一阵子有介绍过 Oracle Cloud 甲骨文云的永久免费服务(详见《Oracle Cloud 甲骨文云宣布提供终身永久免费 VPS、对象存储、数据库等服务,附教程评测》),其中包含免费总和为 20 GB 的对象存储和归档存储,今天我们就把它用起来。

对象存储可以直接在控制面板管理(上传、下载、删除等),也可以使用命令行操作,前一种没什么难度,看得懂字都会操作,我们尝试通过第二种方法来用上免费的对象存储,对于 Linux 系统来说,使用命令行也比面板操作方便。

配置环境

命令行操作是通过 Oracle Command Line Interface(简称 oci )来实现的,因此,环境搭建好后的操作命令是一样的。

oci 基于 Python,因此在安装 oci 前应先安装好 Python,Linux 环境可参考《Linux 下如何使用源码安装 python3 以及 pip3》,Windows 环境直接下载按提示安装或者在安装 oci 时自动安装。

推荐使用官方一键安装包来配置环境(官方文档)。

Windows

利用 PowerShell 自动安装,使用“以管理员身份运行”选项打开 PowerShell 控制台,允许远程执行策略:

PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): A

然后执行自动安装脚本,其中需要介入的配置有:是否安装 Python、lib 安装目录、bin 安装目录、scripts 安装目录、额外扩展包、是否自动修改 PATH:

PS C:\Windows\system32> powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))"

        ******************************************************************************
        You have started the OCI CLI Installer in interactive mode. If you do not wish
        to run this in interactive mode, please include the -AcceptAllDefaults option.
        If you have the script locally and would like to know more about
        input options for this script, then you can run:
        help .\install.ps1
        If you would like to know more about input options for this script, refer to:
        https://github.com/oracle/oci-cli/blob/master/scripts/install/README.rst
        ******************************************************************************
详细信息: No valid Python installation found.

Python is required to run the CLI.
Install Python now? (Entering "n" will exit the installation script)
[Y] Yes  [N] No  [?] 帮助 (默认值为“Y”):
详细信息: Downloading Python...
详细信息: Download Complete! Installer executable written to: F:\Temp\tmpE8BD.tmp.exe
详细信息: Installing Python to C:\Users\Administrator\Python...
详细信息: Successfully installed Python!
详细信息: Downloading install script to F:\Temp\tmp8339.tmp
详细信息: C:\Users\Administrator\Python False   False
详细信息: Using Python executable: C:\Users\Administrator\Python\python.exe to run install script...
详细信息: Arguments to python script: "F:\Temp\tmp8339.tmp"
-- Verifying Python version.
-- Python version 3.6.5 okay.

===> In what directory would you like to place the install? (leave blank to use 'C:\Users\Administrator\lib\oracle-cli'): D:\Portable\Oracle\lib
-- Creating directory 'D:\Portable\Oracle\lib'.
-- We will install at 'D:\Portable\Oracle\lib'.

===> In what directory would you like to place the 'oci.exe' executable? (leave blank to use 'C:\Users\Administrator\bin'): D:\Portable\Oracle\bin
-- The executable will be in 'D:\Portable\Oracle\bin'.

===> In what directory would you like to place the OCI scripts? (leave blank to use 'C:\Users\Administrator\bin\oci-cli-scripts'): D:\Portable\Oracle\scripts
-- Creating directory 'D:\Portable\Oracle\scripts'.
-- The scripts will be in 'D:\Portable\Oracle\scripts'.

===> Currently supported optional packages are: ['db (will install cx_Oracle)']
What optional CLI packages would you like to be installed (comma separated names; press enter if you don't need any optional packages)?:
-- The optional packages installed will be ''.

......

Successfully built retrying terminaltables arrow configparser pycparser
Installing collected packages: jmespath, six, retrying, terminaltables, click, python-dateutil, idna, pycparser, cffi, asn1crypto, cryptography, pyOpenSSL, PyYAML, arrow, configparser, pytz, certifi, oci, oci-cli
Successfully installed PyYAML-5.1.2 arrow-0.10.0 asn1crypto-1.2.0 certifi-2019.9.11 cffi-1.13.2 click-6.7 configparser-3.5.0 cryptography-2.4.2 idna-2.6 jmespath-0.9.3 oci-2.6.5 oci-cli-2.6.13 pyOpenSSL-18.0.0 pycparser-2.19 python-dateutil-2.7.3 pytz-2016.10 retrying-1.3.3 six-1.11.0 terminaltables-3.1.0

===> Modify PATH to include the CLI and enable tab completion in PowerShell now? (Y/n): Y
--
-- ** Close and re-open PowerShell to reload changes to your PATH **
-- In order to run the autocomplete script, you may also need to set your PowerShell execution policy to allow for running local scripts (as an Administrator run Set-ExecutionPolicy RemoteSigned in a PowerShell prompt)
--
-- Installation successful.
-- Run the CLI with D:\Portable\Oracle\bin\oci.exe --help
详细信息: Successfully installed OCI CLI!

MacOS / Linux / Unix

使用官方一键安装包安装,与 Windows 类似,参照着配置:

[root@oc ~]# bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

手动安装

如果不想使用官方一键安装包,也可以手动安装运行环境(官方文档),主要分为三个步骤:

步骤1:安装Python

Windows

从 Python Windows 下载页面安装 Python ,在安装过程中,选择将 Python 添加到 PATH 或环境变量(取决于安装时的提示)。

Windows Server 2008 R2

要在Windows Server 2008 R2 上安装 Python,必须先安装 Python 2.7,或将 Windows 2008 R2 Service Pack 1(SP1)安装到该实例,然后再安装更高版本的 Python。

Oracle Linux 7.3

在安装 CLI 之前,请在新的 Oracle Linux 7.3 映像上运行以下命令。

sudo yum install gcc libffi-devel python-devel openssl-devel
sudo easy_install pip

Oracle Linux 6

在 Oracle Linux 6 上,通常需要更新版本的 Python,您可以通过从 Python 下载,在现有版本的基础上安装新版本,然后在使用新版本的虚拟环境中安装 CLI。要安装新版本的 Python,请运行以下命令。

sudo yum install gcc libffi-devel python-devel openssl-devel
sudo easy_install pip
curl -O https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
tar -xvzf Python-3.6.0.tgz
cd Python-3.6.0
./configure
make
sudo make install

CentOS 6 和 CentOS 7

在安装 CLI 之前,请在新的 CentOS 映像上运行以下命令:

sudo yum install gcc libffi-devel python-devel openssl-devel
sudo easy_install pip

Ubuntu 16.04

应该安装 Python,但是如果您需要安装 Python,请使用操作系统的常规软件包管理器。

要安装其他必需的组件,请运行以下命令:

sudo apt-get update
sudo apt-get install build-essential libssl-dev libffi-dev python-dev
sudo apt-get install python3-pippip3 install --upgrade pip

步骤2:安装和配置 virtualenv

virtualenv 是一个虚拟环境构建器,可让您创建隔离的 Python 环境。对于 Linux 用户,virtualenv 通常与主 Python 包在单独的包中。

从以下位置下载软件和文档:

软体:GitHubPyPI
文档:Docs Virtualenv

安装和配置 virtualenv

安装 Python 之后,请安装并配置 virtualenv 。

  • 要为 Python 2 设置环境,请使用以下命令:
pip install virtualenv
  • 要为Python 3设置环境,请使用以下命令:
pip3 install virtualenv

virtualenv 通常会安装到您的 Python 目录中。例如:

/usr/local/share/python3/virtualenv
  • (可选)要创建用于存储虚拟环境的目录,请运行以下命令:
mkdir -p myvirtualspaces/virtualenvs
  • 要创建没有任何软件包的新虚拟环境,请运行以下命令:
virtualenv myvirtualspaces/virtualenvs/cli-testing --no-site-packages

如果要安装新版本的 Python 以与现有版本一起运行,则可以创建一个使用新版本的虚拟环境。

要引用新版本的 Python ,请使用 -p 参数运行以下命令:

virtualenv -p /usr/local/bin/python3.6 cli-testing

步骤3:安装命令行界面

您可以从 GitHub 下载 CLI 或从 Python Package Index(PyPI)安装软件包。

  • 要使用 GitHub 下载进行安装:

1、下载并解压缩 oci-cli.zip;
2、运行以下命令:

pip install oci_cli-*-py2.py3-none-any.whl
  • 要使用 PyPI 安装,请运行以下命令:
pip install oci-cli

配置参数

该步骤主要是配置身份验证,在使用 CLI 之前,必须先创建一个配置文件,我们使用设置对话框的方式,按提示输入用户的 OCID 和 租户的 OCID(如何查找)、区域和可用性域(如何查找):

PS C:\Windows\system32> oci setup config
    This command provides a walkthrough of creating a valid CLI config file.

    The following links explain where to find the information required by this
    script:

    User OCID and Tenancy OCID:

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other

    Region:

        https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm

    General config documentation:

        https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm


Enter a location for your config [C:\Users\Administrator\.oci\config]: D:\Portable\Oracle\config
Enter a user OCID: ocid1.user.oc1..*
Enter a tenancy OCID: ocid1.tenancy.oc1.*
Enter a region (e.g. ap-mumbai-1, ap-seoul-1, ap-sydney-1, ap-tokyo-1, ca-toronto-1, eu-frankfurt-1, eu-zurich-1, sa-saopaulo-1, uk-london-1, us-ashburn-1, us-gov-ashburn-1, us-gov-chicago-1, us-gov-phoenix-1, us-langley-1, us-luke-1, us-phoenix-1): ap-tokyo-1

以及 API 密钥,API 密钥可以使用已创建的,也可以自动创建一个(建议不要设置密码加密):

Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: n
Enter the location of your private key file: D:\Portable\Oracle\oci_api_key.pem
Fingerprint: *
Config written to D:\Portable\Oracle\config


    If you haven't already uploaded your public key through the console,
    follow the instructions on the page linked below in the section 'How to
    upload the public key':

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2

OCI 在使用时还会校验 API 密钥的权限,如果密钥是自己创建的,需要先让 OCI 修复一下:

D:\Portable\Oracle>oci setup repair-file-permissions --file D:\Portable\Oracle\oci_api_key.pem

然后到后台 控制面板 - 用户 - 用户信息 - API 密钥,把私钥对应的的公钥添加到这里:

添加密钥.png

OCI 默认只识别 ~/.oci/config 配置,所以如果改变了配置位置,应该创建一个链接,比如 Windows 下可以:

D:\Portable\Oracle>mklink /J C:\Users\Administrator\.oci D:\Portable\Oracle
为 C:\Users\Administrator\.oci <<===>> D:\Portable\Oracle 创建的联接

因为在安装时,我把配置文件 conifg 安装到了 D:\Portable\Oracle 下,所以可以直接这么操作,具体要看大家自己的配置。

在这里还有一个技巧,OCI 命令支持缩写命令,比如指定对象存储默认的命名空间等,后续使用 OCI 就不用再输入命名空间,默认通过 ~/.oci/oci_cli_rc 指定:

D:\Portable\Oracle>oci setup oci-cli-rc --file D:\Portable\Oracle\oci_cli_rc
Predefined queries written under section OCI_CLI_CANNED_QUERIES
Command aliases written under section OCI_CLI_COMMAND_ALIASES
Parameter aliases written under section OCI_CLI_PARAM_ALIASES

执行后会自动创建文件,然后可以根据示例自己添加。

操作教程

创建存储桶

我们创建一个权限为只读的名为 vircloud.net 的标准存储桶:

D:\Portable\Oracle> oci os bucket create --name vircloud.net --namespace 命名空间 --public-access-type ObjectRead --storage-tier Standard --compartment-id ocid1.tenancy.oc1..**
{
  "data": {
    "approximate-count": null,
    "approximate-size": null,
    "compartment-id": "ocid1.tenancy.oc1..**",
    "created-by": "ocid1.user.oc1..**",
    "defined-tags": {},
    "etag": "***",
    "freeform-tags": {},
    "kms-key-id": null,
    "metadata": {},
    "name": "vircloud.net",
    "namespace": "命名空间",
    "object-events-enabled": false,
    "object-lifecycle-policy-etag": null,
    "public-access-type": "ObjectRead",
    "storage-tier": "Standard",
    "time-created": "2019-11-22T03:35:32.304000+00:00"
  },
  "etag": "***"
}

其中,

  • 命名空间可通过命令获取:oci os ns get
  • 权限接受的类型有 NoPublicAccess(默认)、ObjectReadObjectReadWithoutList
  • 存储桶类型有 ArchiveStandard(默认);
  • --compartment-id 在后台控制面板-监管和管理-身份-区间-区间详细信息 可以找到。

删除存储桶

D:\Portable\Oracle> oci os bucket delete --name vircloud.net

注:所有命令均可以在后面添加 -? 查看帮助说明文件,如:oci os bucket -?oci os bucket delete -?

更新存储桶权限

D:\Portable\Oracle> oci os bucket update --name vircloud.net --public-access-type NoPublicAccess

查看存储桶清单

D:\Portable\Oracle> oci os bucket list --all
{
  "data": [
    {
      "compartment-id": "ocid1.tenancy.oc1..*",
      "created-by": "ocid1.user.oc1..*",
      "defined-tags": null,
      "etag": "*",
      "freeform-tags": null,
      "name": "vircloud.net",
      "namespace": "*",
      "time-created": "2019-11-22T03:35:32.304000+00:00"
    }
  ]
}

前面提到 OCI 命令支持缩写命令,所以这里我在 oci_cli_rc 定义了缩写:

[DEFAULT]
os.bucket.compartment-id=ocid1.tenancy.oc1**

好处就是,后续我将不需要再附带 --compartment-id 参数,比如列出存储桶清单,原先应输入的命令是:

D:\Portable\Oracle> oci os object list --all --compartment-id **

现在则只需要输入:

D:\Portable\Oracle> oci os object list --all 
{
  "data": [
    {
      "md5": "6itQoZVQLkfQAQkFqtYwlw==",
      "name": "001.jpg",
      "size": 1620675,
      "time-created": "2019-11-22T04:15:51.217000+00:00"
    }
  ],
  "prefixes": []
}

具体用法可参见官方文档

查看文件清单

查看某个存储桶里的文件清单:

D:\Portable\Oracle> oci os object list
{
  "data": [
    {
      "md5": "6itQoZVQLkfQAQkFqtYwlw==",
      "name": "001.jpg",
      "size": 1620675,
      "time-created": "2019-11-22T04:15:51.217000+00:00"
    }
  ],
  "prefixes": []
}

这里,我在 oci_cli_rc 定义了默认存储桶和命名空间:

[DEFAULT]
...
os.object.bucket-name=vircloud.net
os.object.namespace=**

所以不用再添加 --bucket-name--namespace,后面类似的,不再说明。

查看文件头信息

D:\Portable\Oracle> oci os object head --name 001.jpg
{
  "accept-ranges": "bytes",
  "access-control-allow-credentials": "true",
  "access-control-allow-methods": "POST,PUT,GET,HEAD,DELETE,OPTIONS",
  "access-control-allow-origin": "*",
  "access-control-expose-headers": "accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-md5,content-type,etag,last-modified,opc-client-info,opc-client-request-id,opc-request-id,x-api-id",
  "connection": "keep-alive",
  "content-length": "1620675",
  "content-md5": "*",
  "content-type": "image/jpeg",
  "date": "Fri, 22 Nov 2019 04:18:00 GMT",
  "etag": "*",
  "last-modified": "Fri, 22 Nov 2019 04:15:56 GMT",
  "opc-client-request-id": "*",
  "opc-request-id": "nrt-1:*",
  "x-api-id": "native"
}

重命名文件

D:\Portable\Oracle> oci os object rename --name 001.jpg --new-name /img/001.jpg
{
  "etag": "9320a73e-0387-41b3-8f6d-4cb02c895d3a"
}

实际上,我们并没有创建(对象存储也不支持)img 文件夹,但是仍然可以通过 /img/001.jpg 来访问到上传的文件(符号 / 要转码为 %2F)。

上传文件

上传单个文件

D:\Portable\Oracle> oci os object put --file F:\1670564936.gif
Uploading object  [####################################]  100%
{
  "etag": "f692ff57-babf-473c-ad7e-2cc97f47dd37",
  "last-modified": "Fri, 22 Nov 2019 05:12:01 GMT",
  "opc-content-md5": "u/QAH7vSndK9RhE0qFUn2g=="
}

我们还可以添加:

  • --name 指定上传后保存要使用的文件名;
  • --metadata '{"key1":"value1","key2":"value2"}' 指定头信息;
  • --force 强制覆盖已存在的同名文件;
  • --no-multipart 禁止分段上传(默认 128MB 分段,服务器上合并);
  • --part-size [integer] 指定分段大小(超过分段);
  • --no-overwrite 跳过已存在的同名文件,默认会询问;
  • --overwrite 覆盖已存在的同名文件,默认会询问;
  • --verify-checksum 检查上传后的文件和本地文件校验值;

这里需要注意的是,通过 API 上传的文件,所有文件的 content-type 默认都是 application/octet-stream,此时可以通过 --content-type [text] 来指定,比如如果上传的是 .gif 文件,可以如下命令:

D:\Portable\Oracle> oci os object put --file F:\1670564936.gif --content-type 'image/gif'
Uploading object  [####################################]  100%
{
  "etag": "f692ff57-babf-473c-ad7e-2cc97f47dd37",
  "last-modified": "Fri, 22 Nov 2019 05:12:01 GMT",
  "opc-content-md5": "u/QAH7vSndK9RhE0qFUn2g=="
}

相关文件类型可以参考 Mozilla 的文档 - MIME 类型

虽然不指定 --content-type [text] 不影响调用,但直接打开的话会变成下载。

上传文件夹

D:\Portable\Oracle> oci os object bulk-upload --src-dir D:\Flags-Icon-Set\96x96
Uploaded AD.png  [####################################]  100%
......
Uploaded ZW.png  [####################################]  100%

{
  "skipped-objects": [],
  "upload-failures": {},
  "uploaded-objects": {
    "AD.png": {
      "etag": "5c01f093-8e29-4448-a3e9-979f6266b198",
      "last-modified": "Fri, 22 Nov 2019 05:24:14 GMT",
      "opc-content-md5": "oVIONp1uehrm+8FsUnGw1w=="
    },
......

与上传单个文件类似,文件夹上传也是可以添加参数来达到不同的效果:

  • --exclude [text] 仅上传与提供的参数不匹配的文件,可以多次提供此选项,以匹配多种模式,支持的模式符号是:* 匹配所有内容,? 匹配任何单个字符,[sequence] 按顺序匹配任何字符,[!sequence] 匹配不按顺序排列的任何字符;
  • --include [text]--exclude [text] 类似,仅上传与提供的参数匹配的文件;
  • --metadata '{"key1":"value1","key2":"value2"}' 指定头信息;
  • --no-multipart 禁止分段上传(默认 128MB 分段,服务器上合并);
  • --part-size [integer] 指定分段大小(超过分段);
  • --no-overwrite 跳过已存在的同名文件,默认会询问;
  • --overwrite 覆盖已存在的同名文件,默认会询问;
  • --verify-checksum 检查上传后的文件和本地文件校验值;
  • --object-prefix [text] 文件名前自动添加指定字段;

注意,如果上传的文件夹中还有文件夹,如 D:\Flags-Icon-Set\96x96\Asia\CN.png,那么上传后文件名会变成 Asia/CN.png,而文件夹里的文件,如 D:\Flags-Icon-Set\96x96\US.png,上传后文件名仍是 US.png,所以批量上传时务必确认清楚源文件夹(src-dir)。

下载文件

下载单个文件

D:\Portable\Oracle> oci os object get --name AD.png --file 001.jpg
Downloading object  [####################################]  100%

我们还可以添加:

  • --multipart-download-threshold [integer range] 分段下载阈值(单位 MB),大于此大小将分段进行,最小 128;
  • --part-size [integer range] 每个分段的大小(单位 MB),最小 128;
  • --parallel-download-count [integer] 分段下载的并行进程;
  • --range [text] 类似分段下载,我们可以指定下载某个范围内字节;

下载指定文件

D:\Portable\Oracle> oci os object bulk-download --download-dir ./
Downloaded test/22.txt  [####################################]  100%
Downloaded 新建文本文档.txt  [####################################]  100%
Downloaded AD.png  [####################################]  100%

{
  "download-failures": {},
  "skipped-objects": []
}

同样可以添加参数增强下载:

  • --exclude [text] 类似上传,仅下载与提供的参数不匹配的对象;
  • --include [text] 类似上传,仅下载与提供的参数匹配的对象;
  • --multipart-download-threshold [integer range] 分段下载阈值(单位 MB),大于此大小将分段进行,最小 128;
  • --no-overwrite 跳过已存在的同名文件,默认会询问;
  • --overwrite 覆盖已存在的同名文件,默认会询问;
  • --part-size [integer range] 每个分段的大小(单位 MB),最小 128;
  • --parallel-download-count [integer] 分段下载的并行进程;
  • --delimiter / 如 img/001.jpg,下载时将不会下载 001.jpg;
  • --prefix [text] 下载具有给定前缀的所有对象,忽略此参数则为所有;

--delimiter /--prefix [text] 的配合使用

在批量上传时有提到,如果源文件夹中仍有文件夹,那么子文件夹会变成文件名的一部分,如上传的文件夹结构为:

- test
-- testt
--- testttt
-----txttt.txt
--- txtt.txt
-- txt.txt

那么指定 src-dir test 时,上传后会有三个文件,文件名分别为:testt/testttt/txttt.txttestt/txtt.txttxt.txt,如果下载时,我们只想下载 testt 目录下的文件,而忽略上一层及下一层目录文件,则可以怎么指定参数:

oci os object bulk-download --download-dir ./ --prefix testt/ --delimiter /

删除文件

删除单个文件

D:\Portable\Oracle> oci os object delete --name 新建文本文档.txt
Are you sure you want to delete this resource? [y/N]:y

高级删除操作:

  • --force 强制删除,不会弹出询问是否删除;

删除指定文件

D:\Portable\Oracle> oci os object bulk-delete --prefix test
WARNING: This command will delete 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted test/22.txt  [####################################]  100%

{
  "delete-failures": {},
  "deleted-objects": [
    "test/22.txt"
  ]
}

与批量下载类似,同样可以配合参数达到删除指定文件等更准确效果:

  • --dry-run 模拟删除,回显删除的效果,但实际不会删除;
  • --exclude [text] 仅删除不匹配的对象;
  • --include [text] 仅删除匹配的对象
  • --force 强制删除,不会弹出询问是否删除;
  • --parallel-operations-count [integer] 执行进程数,默认 10;
  • --prefix 删除所有具有给定前缀的对象;

删除所有文件

D:\Portable\Oracle> oci os object bulk-delete
WARNING: This command will delete 2 objects. Are you sure you wish to continue? [y/N]: N
Abort:

生命周期管理

Oracle 对象存储支持使用对象生命周期管理,可以自动管理对象的归档和删除,减少存储成本和花费在管理数据上的时间。

创建策略

以下生命周期策略在 30 天后归档对象,并在 180 天后删除对象:

D:\Portable\Oracle> oci os object-lifecycle-policy put --items "[{\"action\":\"ARCHIVE\",\"is-enabled\":true,\"name\":\"30 天后归档\",\"object-name-filter\":{\"exclusion-patterns\":[\"*.jpg\"],\"inclusion-patterns\":[\"*.doc\"],\"inclusion-prefixes\":[\"documents/\"]},\"time-amount\":30,\"time-unit\":\"DAYS\"},{\"action\":\"DELETE\",\"is-enabled\":true,\"name\":\"180 天后删除\",\"object-name-filter\":{\"exclusion-patterns\":null,\"inclusion-patterns\":null,\"inclusion-prefixes\":null},\"time-amount\":180,\"time-unit\":\"DAYS\"}]"

注:永久免费账户不支持生命周期管理,会提示权限不足。

查看策略

D:\Portable\Oracle> oci os object-lifecycle-policy get

删除策略

D:\Portable\Oracle> oci os object-lifecycle-policy delete

还原归档状态

如果文件被生命周期管理归档,可以在归档后临时调回标准状态(删除了就没办法了):

D:\Portable\Oracle> oci os object restore 文件名 --hours 多少小时(默认 24)

查看还原状态

D:\Portable\Oracle>oci os object restore-status --name 文件名
Available, this object is available for download.

注意事项

1、永久免费服务限制每月 50,000 个对象存储 API 请求;
2、如果免费试用期结束时使用的限制超过 20 GiB 限制,则所有对象将被删除;
3、支持中文文件名,但在命令行中(实际是 Json)中文会转为 Unicode(类似 \u65b0\u5efa),操作时仍以中文文件名为准,不能使用 Unicode 转码后的 Name;
4、对象存储如果设为公开则外网可访问,每个区域的对象存储外网地址都是一样的:https://objectstorage.机房代码.oraclecloud.com
5、Oracle 网络较适合移动,延迟低丢包少,但不适合联通、电信(监控一个月发现,联通平均丢包 20% 以上,电信平均丢包 15% 以上);
6、文件删除后不是立即生效,即在删除后一定时间内仍然可以访问该文件。


参考文章:

1、《OCI CLI Command Reference - bucket
2、《OCI CLI Command Reference - object
3、《Oracle Cloud Infrastructure CLI 命令参考


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 VPS免费福利网盘主机教程apioracle甲骨文oracle cloud对象存储使用说明oci 的文章

 本文最后更新于 2019/12/19 16:50:39,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 经验 > Oracle Cloud 甲骨文云对象存储 ObjectStorage API(OCI)详细使用说明