Skip to content
Jacky Chan edited this page Aug 26, 2012 · 33 revisions

Aliyun OSS Java CLI

Aliyun OSS Java控制台,可以在控制台操作Aliyun OSS上的文件。Java CLI控制台主要涉及: 本地配置,本地仓库和CLI交互。本地配置保存Aliyun OSS的密钥信息,用户配置等, 本地参考主要保存本地和Aliyun OSS上的部分文件。 CLI就是你看到的这个应用啦。

基本说明

Aliyun OSS是一个云存储的平台,但是还是和我们平时理解的磁盘系统有些不一样,这里我们做一些说明:

  • Bucket: 文件桶,负责存储文件,方便你对文件进行归类。理解为Windows不同的磁盘可能牵强点,但是理解为MySQL下的不同database可能最直接。
  • 目录和文件名:在OSS中是没有目录这个概念的,所有的文件都是以一个key进行唯一标示的,只是你在key中加入斜杠(/)后,OSS在展现的时候处理为目录,方便你浏览,这个一定要明晰。 由于控制台还需要和本地文件系统打交道,所以我们针对虚拟目录和key做一些约定:
    • key为普通字符串,同时包含斜杠,不要包含一些特殊字符。如“备份目录“,"file*sf" 这些包含中文和特殊字符的key最好不要使用。

    • 由于斜杠(/)担任目录分割的任务,所以key不要以斜杠开头,文件名称也不要以斜杠结尾。如 "/backup"和"/backup/file1/"这样的key虽然可以使用,但是不是最好的。

    • 识别虚拟目录。在某些操作中,如copy,我们将一个文件移动到另外一个目录下,这个时候就需要失败一个目录。由于OSS中没有目录概念,所以我们约定以斜杠结尾表示目录,如:

      cp demo/first.jpg  backup/
      

      表示将“demo/first.jpg"文件copy到虚拟的"backup/"目录下,那么新的key就是”backup/first.jpg",如果没有斜杠结尾,那么新的key就是"backup”啦。

    • 在控制台中,如果引用一个文件的路径,我们称之为为 object key,如果是目录,则为 object path

  • 文件:在OSS称之为Object,这个Object包含文件的内容,同时包含一些文件的属性,如文件大小、类型、创建和修改时间等等。
  • OSS URI: 每一种资源都可以以URI方式进行定位,当然OSS中的文件也不例外。 OSS的URI方式为:oss://bucket_name/xxxx/yyyy/file.name,其中bucket_name就是bucket的名称, key为"xxxx/yyyy/file.name"。 下面是一些常用的OSS URI
    • oss://bucket_name 标识bucket的引用
    • oss://bucket_name/backup/ 虚拟目录的引用,前面介绍过,以斜杠结尾表示虚拟目录,不表示真实存在的文件
    • oss://bucket_name/backup/2012-08/demo.jpg 对OSS的object引用。

本地文件仓库

所有的文件都保存云端的OSS上,但是由于实际的操作,我们还需要建立一个本次磁盘的文件仓库(就是一个目录)完成的OSS的映射,这样的目的主要是便于我们的一些操作。如同步,上传和下载等。 本地文件仓库的目录结构如下:

    /home/user1/aliyun_oss
        bucket1
           demo.jpg
        bucket2
           backup
              database1-2012-08-18.sql.tgz

如一个BBS论坛,用户上传了很多的附件,我们可以在后台设置所有的附件保存到/home/user1/aliyun_oss/bucket1目录下,这样我们定时将这些附件同步到OSS进行备份和保存。 同时我们晚上执行mysql dump,将dump文件保存到/home/user1/aliyun_oss/bucket2/backup目录下,同样定时同步到OSS上进行备份和保存。 另外一方面,我们可能需要从OSS同步一些文件进行测试,也需要存放于本地。 所以一个本地的文件仓库,同时和OSS进行映射,会让我们的操作变得非常简单。 注意: 从OSS同步到本地文件仓库时,要确保你提前对文件容量的评估。OSS通常用于保存大量的文件,而非个人网盘,所以从云端同步到本地要谨慎,如磁盘容量不够,单个目录下超多文件等。

设置Aliyun API密钥

进入控制台后,第一步要进行的就是设置Aliyun API密钥,然后才能进行操作。设置密钥的命令如下:

config --id yourid --key yourkey --repository /home/user1/aliyun_oss

id和key分别对应密钥的id和key。--repository就是我们前面介绍的本地文件仓库,目录如果不存在会自动创建。 获取密钥的请参考下图: Aliyun API密钥

Bucket列表

密钥设置完成后,就是列出OSS上的Bucket啦,使用 df 命令即可。bukcet列表信息主要包括:

  • 权限:-- 表示私有(private), R-表示公共读(PublicRead),RW表示公共读写(PublicReadWrite)
  • 创建时间
  • bucket的URI: bucket的地址

创建Bucket

创建bucket很简单,执行:

 create --acl private bucket_name

其中acl的参数可以为 private, R-和RW,分别表示私有,公共读和公共读写。 bucket name的模式为 [a-z][a-z0-9-_]{5,15}: 6-16位字符,包含小写字母、数字、中划线和下划线,且以字母开头。

删除Bucket

如果你想删除掉刚刚创建的bucket,执行:

 drop bucket_name

这里注意,一个bucket还包含内容时,你是不能删除的,一定要确保bucket不在包含任何内容,你才可以删除该bucket

切换Bucket

我们经常进行的操作都是在一个bucket内部完成的,所以我们设计了一个切换机制,切换到某一bucket后,接下来的所有操作都会在bucket下进行,如ls, put, get等操作。 这一机制借鉴于mysql console,你切换到某一数据库下,接下来的操作就在该数据库下啦。 当然Aliyun OSS控制台也支持 OSS URI方式操作。命令如下:

 use bucket_name

该命令执行后,就切换到指定bucket上。你下次再进入Aliyun OSS Console会自动切换到该bucket下。再次执行 df,你会看到控制台会给你标示,你可以知道当前在哪个bucket下。 注意: 由于Spring Shell还没有提供动态调整prompt特性,所以无法更改prompt,在Spring Shell实现这个特性后,会将当前选中的bucket添加到prompt中,就更加清晰啦。 请访问 https://jira.springsource.org/browse/SHL-54

上传文件

上传文件到bucket中

put --source /home/user1/demo.jpg  demo/

关于目录的处理,请参考目录处理规范,这里以斜杠结尾,表示最终的object key为目录名+本地文件名。非斜杠结尾,直接以输入的路径为key进行保存。 put会直接覆盖文件,当然你可以使用使用sync命令,这样如果有文件没有改变,则不会上传到OSS上的。

sync --source /home/user1/backup  backup/

如果你想将本地repository中的bucket目录下的内容全部同步到OSS,则执行:

sync --source bucket_name

下载文件

将OSS上的文件下载到本地目录。 由于我们前面介绍过本地文件仓库,如果不提供最终的路径,则会下载到本地的文件仓库,如果提供本地文件路径,则会下载到指定的命令下。 典型用法如下:

  • 下载到指定目录: get --dest /home/user1/demo.jpg first/demo.jpg 或者 get --dest /home/user1/demo.jpg oss://bucket_name/first/demo.jpg
  • 下载到本地文件仓库 get first/demo.jpg
  • 模糊下载: get --dest /home/user1/first/ first/* 所有匹配的文件,都会保存在指定的目录下。 如果 是 get first/* 则会同步到到本地文件仓库中。

Bucket下的操作

接下来我们就是一些常用的操作:

  • ls: 显示bucket下的object,支持前缀通配符(其他方式不支持),如ls demo* 表示显示所有以demo开头的文件,这里最多显示100条记录。
  • file: 显示某一object的详情,如 file demo.jpg,则显示该object详细信息
  • cat:显示文件内容,这里请确保你的文件为文本类型
  • open:调用浏览器打开文件
  • rm: 删除文件,支持模糊匹配,和ls命令一样,如 rm demo.jpg, rm oss://bucket_name/demo.jpg 或者 rm backup/demo*
  • cp: copy文件,如 cp demo.jpg second.jpg
  • mv: 移动文件,如 mv demo.jpg second.jpg
  • set: 设置文件属性, 如 set --key Content-Type --value image/jpeg demo.jpg 可以添加自定义属性,如 set --key tags --value people demo.jpg
  • cd: 更改OSS的虚拟目录。如:cd path , 然后调用 ls,则只会显示指定目录前缀的object。 如果想要取消path选择,执行 cd 回车即可。
  • pwd: 显示当前工作的虚拟目录信息。因为cd会更改当前工作的虚拟目录,所以我们有时需要调用该命令显示当前工作的虚拟目录信息。

CLI命令脚本

在实际的使用中,我们有时需要通过命令行方式来执行一些命令,如在凌晨3:00执行本地磁盘到OSS的上传,这个时候我们需要创建一个脚本 文件,然后将我们需要执行的命令一行行写出来即可。如有一个脚本文件为sync2oss.txt,内容如下:

  use linux_china
  put --source /home/user1/ali_oss/linux_china/demo demo/

最后我们只需要执行以下命令即可:

  ali_oss --cmdfile /home/user1/sync2oss.txt

你可以在Shell脚本或者cron中使用啦。

Clone this wiki locally