您可以通过cp命令将您本地的文件上传至OSS。

说明 cp命令的格式、支持的参数请参见 简介

示例环境

本文以Linux系统为例,将本地文件或文件夹上传至OSS中。您在实际使用中,请根据您的系统和使用环境修改对应参数。示例环境如下:

  • 操作系统:Linux
  • 本地文件:examplefile.txt(根目录下的文件)
  • 本地文件夹:localfolder(根目录下的文件夹)
  • 目标Bucket:examplebucket
  • 目标Bucket指定目录:desfolder

简单上传示例

  • 上传单个文件
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/
    上传时,若不指定上传至OSS的文件名,则默认使用原文件名;若指定文件名,则按照指定的文件名保存在OSS中。例如本示例可以改为:
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/example.txt
  • 上传文件夹
    使用 cp命令时增加 -r选项,可以将目标文件夹上传到OSS。
    ./ossutil cp -r localfolder/ oss://examplebucket/desfolder/
    说明 若上传目标对象为符号链接(软链接),且指向本地文件夹,则使用 cp命令上传时,应当给软链接加上正斜线(/)。
    ./ossutil cp -r symbolic_link/ oss://examplebucket/desfolder/
  • 上传单个文件并指定--meta选项
    上传文件的同时可以使用 --meta选项设置文件的meta信息,其内容格式为 header:value#header:value...
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/examplefile.txt --meta=Cache-Control:no-cache#Content-Encoding:gzip
    说明 更多关于meta设置的信息请参见 set-meta
  • 上传文件夹并跳过已有文件

    批量上传时,若指定--update(可缩写为-u)选项,只有当目标文件不存在,或源文件的最后修改时间晚于目标文件时,ossutil才会执行上传操作。命令如下:

    ./ossutil cp -r localfolder/ oss://examplebucket/desfolder/ -u

    该选项可用于当批量上传失败重传时,跳过已经成功的文件,实现增量上传。

  • 上传文件到开通了请求者付费模式的Bucket
    ./ossutil cp localfolder/examplefile.txt oss://examplebucket/ --payer=requester
  • 仅上传当前目录下的文件,忽略子目录
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --only-current-dir -r
  • 上传时不为目录生成Object

    OSS的目录是用一个0 KB大小,名称以正斜线(/)结尾的Object模拟的。上传时增加--disable-dir-object参数,ossutil不会为该目录生成Object,但您仍可以在OSS控制台看到对应的目录结构。当您删除目录内的文件时,该目录也会消失。

    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --disable-dir-object -r
  • 上传符号链接(软链接)子目录下的文件
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --enable-symlink-dir -r
  • 上传时忽略所有的符号链接子文件以及符号链接子目录
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ -r --disable-all-symlink

上传时限速

上传文件时,指定 --maxupspeed选项,可设置上传的最高速度,单位为KB/s,缺省为0(不限速)。 命令如下:
  • 上传文件并设置限速为1 MByte/s
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/ --maxupspeed 1024
  • 上传文件夹并设置限速为1 MByte/s
    ./ossutil cp -r localfolder/ oss://examplebucket/desfolder/ --maxupspeed 1024

上传并设置对象标签

您可以在上传文件时,通过 --tagging选项设置文件对象标签,多个标签以and(&)符号隔开。命令如下:
./ossutil cp examplefile.txt oss://examplebucket/desfolder/ --tagging "abc=1&bcd=2&……"

关于对象标签的更多说明请参见object-tagging

上传并指定文件类型

您可以在上传文件时,通过 --meta选项设置文件存储类型。存储类型可选值为:
  • Standard:标准存储
  • IA:低频访问
  • Archive:归档存储
若上传时未指定存储类型,则以存储空间的存储类型为准。更多详情请参见 存储类型介绍。命令如下:
  • 上传单个文件并指定存储类型为低频访问类型
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/ --meta X-oss-Storage-Class:IA
  • 上传文件夹并指定存储类型为标准存储类型
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --meta X-oss-Storage-Class:Standard -r

上传并指定读写权限ACL

您可以在上传文件时,通过 --meta选项设置文件的ACL。文件ACL可选值为:
  • default:继承Bucket(默认)
  • private:私有
  • public-read:公共读
  • public-read-write:公共读写
命令如下:
  • 上传单个文件并指定ACL为私有
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/ --meta x-oss-object-acl:private
  • 上传文件夹并指定ACL为公共读
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --meta x-oss-object-acl:public-read  -r

上传并指定加密方式

您可以在上传文件时指定文件的服务器端加密方式,将文件加密后保存在Bucket内,关于服务器端加密功能介绍请参见 服务器端加密。 命令如下:
  • 上传文件并指定加密方式为AES256
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/ --meta=x-oss-server-side-encryption:AES256
  • 上传文件并指定加密方式为KMS
    ./ossutil cp examplefile.txt oss://examplebucket/desfolder/ --meta=x-oss-server-side-encryption:KMS

    使用KMS加密时,OSS会为这个文件在KMS平台上创建一个主密钥,会产生少量KMS密钥API调用费用,详情请参见KMS计费标准

上传并生成快照

批量上传时,若指定 --snapshot-path选项,ossutil在指定的目录下生成文件上传的快照,记录成功上传、下载的文件的本地lastModifiedTime,从而在下次上传、下载时通过比较lastModifiedTime来决定是否跳过相同文件,所以在使用该选项时,请确保两次上传、下载期间没有其他用户更改了OSS上的对应Object。 --snapshot-path选项用于在某些场景下加速增量上传、下载批量文件(拷贝不支持该选项)。例如,文件数较多且两次上传期间没有其他用户更改OSS上对应的Object。命令如下:
./ossutil cp -r localfolder/ oss://examplebucket/desfolder/ --snapshot-path=path                                
注意
  • ossutil不会主动删除snapshot-path下的快照信息,为了避免快照信息过多,当您确定快照信息无用时,请自行清理snapshot-path。
  • 由于读写snapshot信息需要额外开销,当要批量上传、下载的文件数比较少或网络状况比较好或有其他用户操作相同Object时,并不建议使用该选项。可以使用--update选项来增量上传、下载。
  • --update选项和--snapshot-path选项可以同时使用,ossutil会优先根据snapshot-path信息判断是否跳过此文件,如果不满足跳过条件,再根据--update判断是否跳过此文件。

批量上传符合条件的文件

您可以使用--include--exclude参数,在cp操作时批量选择对应条件的文件,使用时需同时指定--recursive(-r)选项。

--include--exclude选项支持格式:
  • *:通配符,匹配所有字符。例如:*.txt表示匹配所有TXT格式的文件。
  • ?:匹配单个字符,例如:abc?.jpg表示匹配所有文件名为abc+任意单个字符的JPG格式的文件,如abc1.jpg
  • [sequence]:匹配序列的任意字符,例如:abc[1-5].jpg表示匹配文件名为abc1.jpg~abc5.jpg的文件。
  • [!sequence]:匹配不在序列的任意字符,例如:abc[!0-7].jpg,表示匹配文件名不为abc0.jpg~abc7.jpg的文件。
一条规则中可以包含多个include(包含)和exclude(排除)条件,且每个文件从左到右逐一运用每个规则,直至最后才能最终确定匹配的结果。例如指定生效的文件夹中包含名为 test.txt的文件,匹配不同的规则产生的结果如下。
  • 规则一:--include "*test*" --exclude "*.txt" ,当规则匹配到--include "*test*",匹配的结果为test.txt符合条件;当规则继续匹配到--exclude "*.txt"时,因test.txt文件名包含.txt,所以被排除。则匹配的最终结果为test.txt不符合条件。
  • 规则二:--exclude "*.txt" --include "*test*",当规则匹配到--exclude "*.txt",匹配的结果为test.txt不符合条件;当规则继续匹配到--include "*test*",因test.txt文件名包含test,所以符合条件。则匹配的最终结果为test.txt符合条件。
  • 规则三:--include "*test*" --exclude "*.txt" --include "te?t.txt" ,当规则匹配到--include "*test*",匹配的结果为test.txt符合条件;当规则继续匹配到--exclude "*.txt"时,因test.txt文件名包含.txt,所以被排除;当规则最后匹配到--include "te?t.txt"时,因test.txt符合条件,所以被包含。则匹配的最终结果为test.txt符合条件。
说明 设定条件时不支持带目录的格式,例如: --include "/usr/test/.jpg"
命令如下:
  • 上传所有文件格式为TXT的文件
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --include "*.txt" -r
  • 上传所有文件名包含abc且不是JPGTXT格式的文件
    ./ossutil cp localfolder/ oss://examplebucket/desfolder/ --include "*abc*" --exclude "*.jpg" --exclude "*.txt" -r