华为云用户手册

  • 概述 CS E提供Sermant Agent,支持Dubbo应用无需任何修改接入ServiceComb引擎,当前已支持应用注册发现、标签路由功能。 此功能目前处于公测阶段,当前仅在华东-上海一支持。 Sermant Agent是基于Sermant开源社区构建的、用于CSE微服务治理场景的Agent。 Sermant Agent基于Java Agent技术实现,应用通过Sermant Agent可实现无代理、非侵入方式接入ServiceComb引擎,并获得标签路由能力。 父主题: Dubbo应用通过Sermant Agent接入ServiceComb引擎
  • 操作步骤 安装Sermant Agent。 登录Linux弹性云服务器。 请参考Linux弹性云服务器登录方式概述选择相应方式登录弹性云服务器。 下载并安装Sermant Agent。 参考如下命令通过shell脚本方式下载并安装Java Agent。 wget -O- https://cse-bucket-cn-east-3.obs.cn-east-3.myhuaweicloud.com/javaagent/install.sh | sh 安装成功后,脚本将输出安装目录。目录为当前用户主目录。 启动应用。 在应用的启动参数上添加如下参数,添加启动参数后,待应用启动完成。 -javaagent:${HOME}/java-agent/java-agent.jar=appName=default -Ddynamic_config_serverAddress={CSE_CONFIG_CENTER_ENDPOINTS} -Dregister.service.address={CSE_REGISTRY_ENDPOINTS} -Dgrace_rule_enableSpring=false 表1 启动参数说明 参数项 说明 appName agent服务名称,默认default,无需修改。 dynamic_config_serverAddress ServiceComb引擎配置中心地址,多个地址使用逗号隔开。 register.service.address ServiceComb引擎注册发现地址。 grace_rule_enableSpring 目前agent默认开启SpringCloud框架优雅上下线功能,所以Dubbo框架需要手动关闭(设置为fasle),否则可能会存在端口冲突的问题。 若需配置APP名称(默认default)、版本(默认1.0.0)请分别使用环境变量-Dservice_meta_application=yourAppName、-Dservice_meta_version=yourVersion进行设置。 ServiceComb引擎服务注册发现地址与ServiceComb引擎配置中心地址需替换为实际地址,可参考如下方式获取: ServiceComb引擎服务注册发现地址:获取ServiceComb引擎服务注册发现地址。 ServiceComb引擎配置中心地址:获取ServiceComb引擎配置中心地址。 验证应用接入ServiceComb引擎。 参考查看微服务列表查看您的应用是否已接入ServiceComb引擎。
  • 概述 CSE提供Sermant Agent,支持Spring Cloud应用无需任何修改接入ServiceComb引擎,当前已支持应用注册发现、配置、优雅上下线、标签路由等功能。 此功能目前处于公测阶段,当前仅在华东-上海一支持。 Sermant Agent是基于Sermant开源社区构建的、用于CSE微服务治理场景的Agent。 Sermant Agent基于Java Agent技术实现,应用通过Sermant Agent可实现无代理、非侵入方式接入CSE。 父主题: Spring Cloud应用通过Sermant Agent接入ServiceComb引擎
  • 操作步骤 安装Sermant Agent。 登录Linux弹性云服务器。 请参考Linux弹性云服务器登录方式概述选择相应方式登录弹性云服务器。 下载并安装Sermant Agent。 参考如下命令通过shell脚本方式下载并安装Java Agent。 wget -O- https://cse-bucket-cn-east-3.obs.cn-east-3.myhuaweicloud.com/javaagent/install.sh | sh 安装成功后,脚本将输出安装目录。目录为当前用户主目录。 启动应用。 在应用的启动参数上添加如下参数,添加启动参数后,待应用启动完成。 -javaagent:${HOME}/java-agent/java-agent.jar=appName=default -Ddynamic_config_serverAddress={CSE_CONFIG_CENTER_ENDPOINTS} -Dregister.service.address={CSE_REGISTRY_ENDPOINTS} 表1 启动参数说明 参数项 说明 appName agent服务名称,默认default,无需修改。 dynamic_config_serverAddress ServiceComb引擎配置中心地址,多个地址使用逗号隔开。 register.service.address ServiceComb引擎服务注册发现地址。 若需配置APP名称(默认default)、版本(默认1.0.0)请分别使用环境变量-Dservice_meta_application=yourAppName、-Dservice_meta_version=yourVersion进行设置。 ServiceComb引擎服务注册发现地址与ServiceComb引擎配置中心地址需替换为实际地址,可参考如下方式获取: ServiceComb引擎服务注册发现地址:获取ServiceComb引擎服务注册发现地址。 ServiceComb引擎配置中心地址:获取ServiceComb引擎配置中心地址。 验证应用接入ServiceComb引擎。 参考查看微服务列表查看您的应用是否已接入ServiceComb引擎。
  • 方式一:手动下载开发包使用GoLand新建工程并编译 以安装OBS Go SDK最新版本为例,步骤如下: 下载OBS Go SDK开发包。 解压该开发包,可以看到其中包含obs文件夹(SDK源码)、main文件夹和examples文件夹(示例代码)和README.MD(SDK版本特性描述文件)。 使用GoLand新建Go工程,将obs、examples、main文件夹拷贝至新建工程中的src文件夹下。 右键单击建好的Go工程,运行弹出菜单中的“Build Project”命令编译工程并等待编译完成。 编译成功后,您的目录结构应该像下面这样: ├── bin ├── pkg ├── src -----├── examples -----├── main -----└── obs └── README.MD
  • 常见的Content-Type 常见的Content-Type(MIME)列表如下: 表1 常见的Content-Type(MIME)列表 文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*(二进制流,未知的文件类型) application/octet-stream .tif image/tiff .a11 application/x-a11 .acp audio/x-mei-aac .ai application/postscript .aif audio/aiff .aifc audio/aiff .aiff audio/aiff .anv application/x-anv .apk application/vnd.android.package-archive .asa text/asa .asf video/x-ms-asf .asp text/asp .asx video/x-ms-asf .au audio/basic .avi video/avi .awf application/vnd.adobe.workflow .biz text/xml .bmp application/x-bmp .bot application/x-bot .c4t application/x-c4t .c90 application/x-c90 .cal application/x-cals .cat application/vnd.ms-pki.seccat .cdf application/x-netcdf .cdr application/x-cdr .cel application/x-cel .cer application/x-x509-ca-cert .cg4 application/x-g4 .cgm application/x-cgm .cit application/x-cit .class java/ .cml text/xml .cmp application/x-cmp .cmx application/x-cmx .cot application/x-cot .crl application/pkix-crl .crt application/x-x509-ca-cert .csi application/x-csi .css text/css .csv text/csv .cut application/x-cut .dbf application/x-dbf .dbm application/x-dbm .dbx application/x-dbx .dcd text/xml .dcx application/x-dcx .der application/x-x509-ca-cert .dgn application/x-dgn .dib application/x-dib .dll application/x-msdownload .doc application/msword .docx application/vnd.openxmlformats-officedocument.wordprocessingml.document .dot application/msword .dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template .drw application/x-drw .dtd text/xml .dwf Model/vnd.dwf .dwf application/x-dwf .dwg application/x-dwg .dxb application/x-dxb .dxf application/x-dxf .edn application/vnd.adobe.edn .emf application/x-emf .eml message/rfc822 .ent text/xml .epi application/x-epi .eps application/x-ps .eps application/postscript .etd application/x-ebx .exe application/x-msdownload .fax image/fax .fdf application/vnd.fdf .fif application/fractals .fo text/xml .frm application/x-frm .g4 application/x-g4 .gbr application/x-gbr . application/x- .gif image/gif .gl2 application/x-gl2 .gp4 application/x-gp4 .hgl application/x-hgl .hmr application/x-hmr .hpg application/x-hpgl .hpl application/x-hpl .hqx application/mac-binhex40 .hrf application/x-hrf .hta application/hta .htc text/x-component .htm text/html .html text/html .htt text/webviewhtml .htx text/html .icb application/x-icb .ico image/x-icon .ico application/x-ico .iff application/x-iff .ig4 application/x-g4 .igs application/x-igs .iii application/x-iphone .img application/x-img .ins application/x-internet-signup .ipa application/vnd.iphone .isp application/x-internet-signup .IVF video/x-ivf .java java/* .jfif image/jpeg .jpe image/jpeg .jpe application/x-jpe .jpeg image/jpeg .jpg image/jpeg .jpg application/x-jpg .js application/x-javascript .jsp text/html .la1 audio/x-liquid-file .lar application/x-laplayer-reg .latex application/x-latex .lavs audio/x-liquid-secure .lbm application/x-lbm .lmsff audio/x-la-lms .ls application/x-javascript .ltr application/x-ltr .m1v video/x-mpeg .m2v video/x-mpeg .m3u audio/mpegurl .m4e video/mpeg4 .mac application/x-mac .man application/x-troff-man .math text/xml .mdb application/msaccess .mdb application/x-mdb .mfp application/x-shockwave-flash .mht message/rfc822 .mhtml message/rfc822 .mi application/x-mi .mid audio/mid .midi audio/mid .mil application/x-mil .mml text/xml .mnd audio/x-musicnet-download .mns audio/x-musicnet-stream .mocha application/x-javascript .mov video/quicktime .movie video/x-sgi-movie mp1 audio/mp1 .mp2 audio/mp2 .mp2v video/mpeg .mp3 audio/mp3 .mp4 video/mp4 .mpa video/x-mpg .mpd application/vnd.ms-project .mpe video/x-mpeg .mpeg video/mpg .mpg video/mpg .mpga audio/rn-mpeg .mpp application/vnd.ms-project .mps video/x-mpeg .mpt application/vnd.ms-project .mpv video/mpg .mpv2 video/mpeg .mpw application/vnd.ms-project .mpx application/vnd.ms-project .mtx text/xml .mxp application/x-mmxp .net image/pnetvue .nrf application/x-nrf .nws message/rfc822 .odc text/x-ms-odc .out application/x-out .p10 application/pkcs10 .p12 application/x-pkcs12 .p7b application/x-pkcs7-certificates .p7c application/pkcs7-mime .p7m application/pkcs7-mime .p7r application/x-pkcs7-certreqresp .p7s application/pkcs7-signature .pc5 application/x-pc5 .pci application/x-pci .pcl application/x-pcl .pcx application/x-pcx .pdf application/pdf .pdb chemical/x-pdb .pdx application/vnd.adobe.pdx .pfx application/x-pkcs12 .pgl application/x-pgl .pic application/x-pic .pko application/vnd.ms-pki.pko .pl application/x-perl .plg text/html .pls audio/scpls .plt application/x-plt .png image/png .png application/x-png .pot application/vnd.ms-powerpoint .potx application/vnd.openxmlformats-officedocument.presentationml.template .ppa application/vnd.ms-powerpoint .ppm application/x-ppm .pps application/vnd.ms-powerpoint .ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow .ppt application/vnd.ms-powerpoint .ppt application/x-ppt . pptx application/vnd.openxmlformats-officedocument.presentationml.presentation .pr application/x-pr .prf application/pics-rules .prn application/x-prn .prt application/x-prt .ps application/x-ps .ps application/postscript .ptn application/x-ptn .pwz application/vnd.ms-powerpoint .r3t text/vnd.rn-realtext3d .ra audio/vnd.rn-realaudio .ram audio/x-pn-realaudio .ras application/x-ras .rat application/rat-file .rdf text/xml .rec application/vnd.rn-recording .red application/x-red .rgb application/x-rgb .rjs application/vnd.rn-realsystem-rjs .rjt application/vnd.rn-realsystem-rjt .rlc application/x-rlc .rle application/x-rle .rm application/vnd.rn-realmedia .rmf application/vnd.adobe.rmf .rmi audio/mid .rmj application/vnd.rn-realsystem-rmj .rmm audio/x-pn-realaudio .rmp application/vnd.rn-rn_music_package .rms application/vnd.rn-realmedia-secure .rmvb application/vnd.rn-realmedia-vbr .rmx application/vnd.rn-realsystem-rmx .rnx application/vnd.rn-realplayer .rp image/vnd.rn-realpix .rpm audio/x-pn-realaudio-plugin .rsml application/vnd.rn-rsml .rt text/vnd.rn-realtext .rtf application/msword .rtf application/x-rtf .rv video/vnd.rn-realvideo .sam application/x-sam .sat application/x-sat .sdp application/sdp .sdw application/x-sdw .sis application/vnd.symbian.install .sisx application/vnd.symbian.install .sit application/x-stuffit .slb application/x-slb .sld application/x-sld .sldx application/vnd.openxmlformats-officedocument.presentationml.slide .slk drawing/x-slk .smi application/smil .smil application/smil .smk application/x-smk .snd audio/basic .sol text/plain .sor text/plain .spc application/x-pkcs7-certificates .spl application/futuresplash .spp text/xml .ssm application/streamingmedia .sst application/vnd.ms-pki.certstore .stl application/vnd.ms-pki.stl .stm text/html .sty application/x-sty .svg image/svg+xml .swf application/x-shockwave-flash .tdf application/x-tdf .tg4 application/x-tg4 .tga application/x-tga .tif image/tiff .tif application/x-tif .tiff image/tiff .tld text/xml .top drawing/x-top .torrent application/x-bittorrent .tsd text/xml .txt text/plain .uin application/x-icq .uls text/iuls .vcf text/x-vcard .vda application/x-vda .vdx application/vnd.visio .vml text/xml .vpg application/x-vpeg005 .vsd application/vnd.visio .vsd application/x-vsd .vss application/vnd.visio .vst application/vnd.visio .vst application/x-vst .vsw application/vnd.visio .vsx application/vnd.visio .vtx application/vnd.visio .vxml text/xml .wav audio/wav .wax audio/x-ms-wax .wb1 application/x-wb1 .wb2 application/x-wb2 .wb3 application/x-wb3 .wbmp image/vnd.wap.wbmp .wiz application/msword .wk3 application/x-wk3 .wk4 application/x-wk4 .wkq application/x-wkq .wks application/x-wks .wm video/x-ms-wm .wma audio/x-ms-wma .wmd application/x-ms-wmd .wmf application/x-wmf .wml text/vnd.wap.wml .wmv video/x-ms-wmv .wmx video/x-ms-wmx .wmz application/x-ms-wmz .wp6 application/x-wp6 .wpd application/x-wpd .wpg application/x-wpg .wpl application/vnd.ms-wpl .wq1 application/x-wq1 .wr1 application/x-wr1 .wri application/x-wri .wrk application/x-wrk .ws application/x-ws .ws2 application/x-ws .wsc text/scriptlet .wsdl text/xml .wvx video/x-ms-wvx .xap application/x-silverlight-app .x_b application/x-x_b .xdp application/vnd.adobe.xdp .xdr text/xml .xfd application/vnd.adobe.xfd .xfdf application/vnd.adobe.xfdf .xhtml text/html .xls application/vnd.ms-excel .xls application/x-xls .xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template .xlw application/x-xlw .xml text/xml .xpl audio/scpls .xq text/xml .xql text/xml .xquery text/xml .xsd text/xml .xsl text/xml .xslt text/xml .xwd application/x-xwd .x_t application/x-x_t .yaml text/vnd.yaml .yml text/vnd.yml .webp image/webp .tar application/x-tar .zip application/zip
  • 初始化OBS客户端 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient实例: // 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.AC CES S_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); // 使用访问OBS // 关闭obsClient // obsClient.close(); 由于JavaScript是异步编程语言,所以不能在访问OBS期间调用close方法。 obsClient在调用obsClient.close方法关闭后不能再次使用。 更多关于OBS客户端初始化的内容请参考“初始化”章节。 日志配置详见配置SDK日志。 代理配置详见配置SDK代理。 父主题: 快速入门
  • 配置SDK代理 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 在项目工程根目录下使用npm命令下载proxy-agent依赖包。 npm install --save proxy-agent 在项目工程里面声明并配置代理。 const ProxyAgent = require("proxy-agent"); const proxyAgent = new ProxyAgent(`http://username:password@proxyhost:proxyPort`); 在项目工程里面初始化OBS客户端并配置代理。 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, security_token: process.env.SECURITY_TOKEN, server : 'https://your-endpoint', https_agent:proxyAgent, http_agent: proxyAgent, }); 父主题: 初始化
  • 通过工厂方法创建 永久访问秘钥(AK/SK)创建OBS客户端代码如下: // 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 通过工厂方法初始化ObsClient实例 var obsClient = new ObsClient(); obsClient.factory({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, security_token: process.env.SECURITY_TOKEN, server : 'https://your-endpoint' }); // 使用访问OBS // 关闭obsClient // obsClient.close(); 临时访问秘钥(AK/SK/SecurityToken)创建OBS客户端代码如下: // 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 通过工厂方法初始化ObsClient实例 var obsClient = new ObsClient(); obsClient.factory({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, security_token: process.env.SECURITY_TOKEN, server : 'https://your-endpoint' }); // 使用访问OBS // 关闭obsClient // obsClient.close(); 您的工程中可以有多个obsClient实例,也可以只有一个。 obsClient实例在调用close方法关闭后不能再次使用。 配置SDK代理请参见配置SDK代理。
  • 通过构造函数创建 永久访问秘钥(AK/SK)创建OBS客户端代码如下: // 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 通过构造函数创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); // 使用访问OBS // 关闭obsClient // obsClient.close(); 临时访问秘钥(AK/SK/SecurityToken)创建OBS客户端代码如下: // 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 通过构造函数创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, security_token: process.env.SECURITY_TOKEN, server : 'https://your-endpoint' }); // 使用访问OBS // 关闭obsClient // obsClient.close();
  • 通过OBS Console配置桶的CORS 登录OBS Console后在桶列表中,单击待操作的桶,进入“概览”页面;如下图所示 在“基础配置”下,单击“CORS规则”卡片,进入“CORS规则”界面。 在“CORS规则”界面,单击“创建”,系统弹出“创建CORS规则”对话框,在该对话框中按照上表的参数进行配置,如下图所示: 单击“确定”,并在“CORS规则”界面查看已配置好的规则。 桶的CORS配置会在两分钟内生效,生效后才能使用OBS BrowserJS SDK访问桶。
  • 复制多版本对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.CopyObject接口传入版本号(SourceVersionId )来复制多版本对象,示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 复制多版本对象 try { CopyObjectRequest request = new CopyObjectRequest(); request.SourceBucketName = "sourcebucketname"; request.SourceObjectKey = "sourceobjectname"; request.BucketName = "destbucketname"; request.ObjectKey = "destobjectName"; request.SourceVersionId = "sourceversionId"; CopyObjectResponse response = client.CopyObject(request); Console.WriteLine("copy object response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 父主题: 多版本控制
  • 设置多版本对象访问权限 您可以通过ObsClient.SetObjectAcl接口传入版本号(VersionId)设置多版本对象的访问权限,示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 设置多版本对象访问权限 try { SetObjectAclRequest request = new SetObjectAclRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.VersionId = "versionId"; request.AccessControlList = new AccessControlList(); Owner owner = new Owner(); owner.Id = "ownerid"; request.AccessControlList.Owner = owner; Grant item = new Grant(); item.Permission = PermissionEnum.FullControl; item.Grantee = new GroupGrantee(GroupGranteeEnum.AllUsers); request.AccessControlList.Grants.Add(item); SetObjectAclResponse response = client.SetObjectAcl(request); Console.WriteLine("Set object acl response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的帐号ID,可通过OBS控制台“我的凭证”页面查看。
  • 获取多版本对象访问权限 您可以通过ObsClient.GetObjectAcl接口传入版本号(VersionId)获取多版本对象的访问权限,示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 获取多版本访问权限 try { GetObjectAclRequest request = new GetObjectAclRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.VersionId = "versionId"; GetObjectAclResponse response = client.GetObjectAcl(request); Console.WriteLine("GetObjectAcl grant account: {0}", response.AccessControlList.Grants.Count); Console.WriteLine("GetObjectAcl owner id: {0}", response.AccessControlList.Owner.Id); foreach (Grant grant in response.AccessControlList.Grants) { if(grant.Grantee is CanonicalGrantee) { Console.WriteLine("Grantee id: {0}", (grant.Grantee as CanonicalGrantee).Id); }else if(grant.Grantee is GroupGrantee) { Console.WriteLine("Grantee type: {0}", (grant.Grantee as GroupGrantee).GroupGranteeType); } Console.WriteLine("Grant permission: {0}", grant.Permission); } } } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 设置桶标签 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.SetBucketTagging设置桶标签。以下代码展示了如何设置桶标签: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 设置桶标签 try { SetBucketTaggingRequest request = new SetBucketTaggingRequest(); request.BucketName = "bucketname"; Tag tag1 = new Tag(); tag1.Key = "tag1"; tag1.Value = "value1"; Tag tag2 = new Tag(); tag2.Key = "tag2"; tag2.Value = "value2"; request.Tags.Add(tag2); request.Tags.Add(tag1); SetBucketTaggingResponse response = client.SetBucketTagging(request); Console.WriteLine("Set bucket tag response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 每个桶支持最多10个标签。 标签的Key和Value支持Unicode。 父主题: 标签管理
  • 开启桶日志 以下代码展示了如何开启桶日志: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); try { // 设置源桶logging SetBucketLoggingRequest putrequest = new SetBucketLoggingRequest(); putrequest.BucketName = "bucketname"; putrequest.Configuration = new LoggingConfiguration(); putrequest.Configuration.TargetBucketName = "targetbucketname"; putrequest.Configuration.TargetPrefix = "access-log."; putrequest.Configuration.Agency= "your agency"; SetBucketLoggingResponse putresponse = client.SetBucketLogging(putrequest); Console.WriteLine("Set bucket logging response: {0}", putresponse.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 删除生命周期规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.DeleteBucketLifecycle删除桶的生命周期规则。以下代码展示了如何删除桶的生命周期规则: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 删除桶生命规则 try { DeleteBucketLifecycleRequest request = new DeleteBucketLifecycleRequest(); request.BucketName = "bucketname"; DeleteBucketLifecycleResponse response = client.DeleteBucketLifecycle(request); Console.WriteLine("Delete bucket lifecycle response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 父主题: 生命周期管理
  • 设置桶多版本状态 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.SetBucketVersioning设置桶的多版本状态。OBS中的桶支持两种多版本状态: 多版本状态 说明 OBS .NET SDK对应值 启用状态 上传对象时,系统为每一个对象创建一个唯一版本号,上传同名的对象将不再覆盖旧的对象,而是创建新的不同版本号的同名对象。 可以指定版本号下载对象,不指定版本号默认下载最新对象。 删除对象时可以指定版本号删除,不带版本号删除对象仅产生一个带唯一版本号的删除标记,并不删除对象。 列出桶内对象列表(ObsClient.ListObjects)时默认列出最新对象列表,可以指定列出桶内所有版本对象列表(ObsClient.ListVersions)。 除了删除标记外,每个版本的对象存储均需计费。 VersionStatusEnum.Enabled 暂停状态 旧的版本数据继续保留。 上传对象时创建对象的版本号为null,上传同名的对象将覆盖原有同名的版本号为null的对象。 可以指定版本号下载对象,不指定版本号默认下载最新对象。 删除对象时可以指定版本号删除,不带版本号删除对象将产生一个版本号为null的删除标记,并删除版本号为null的对象。 除了删除标记外,每个版本的对象存储均需计费。 VersionStatusEnum.Suspended 以下代码展示了如何设置桶的多版本状态: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 设置桶的多版本状态 try { SetBucketVersioningRequest request = new SetBucketVersioningRequest(); request.BucketName = "bucketname"; request.Configuration = new VersioningConfiguration(); //开启桶的多版本 request.Configuration.Status = VersionStatusEnum.Enabled; SetBucketVersioningResponse response = client.SetBucketVersioning(request); Console.WriteLine("Set bucket version response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 父主题: 多版本控制
  • 流式上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 流式上传使用System.IO.Stream作为对象的数据源。您可以通过ObsClient.PutObject上传您的数据流到OBS。以下代码展示了如何进行流式上传: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 上传流 try { String str = "Hello OBS"; Stream stream = new MemoryStream(System.Text.Encoding.Default.GetBytes(str)); PutObjectRequest request = new PutObjectRequest() { BucketName = "bucketname", ObjectKey = "objectname", InputStream = stream, }; PutObjectResponse response = client.PutObject(request); Console.WriteLine("put object response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 大文件上传建议使用分段上传。 上传的内容大小不能超过5GB。 父主题: 上传对象
  • 获取对象访问权限 您可以通过ObsClient.GetObjectAcl获取对象的访问权限。以下代码展示如何获取对象访问权限: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 获取对象访问权限 try { GetObjectAclRequest request = new GetObjectAclRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; GetObjectAclResponse response = client.GetObjectAcl(request); Console.WriteLine("Get bucket acl response: {0}", response.StatusCode); foreach(Grant grant in response.AccessControlList.Grants) { if(grant.Grantee is CanonicalGrantee) { Console.WriteLine("Grantee id: {0}", (grant.Grantee as CanonicalGrantee).Id); }else if(grant.Grantee is GroupGrantee) { Console.WriteLine("Grantee type: {0}", (grant.Grantee as GroupGrantee).GroupGranteeType); } Console.WriteLine("Grant permission: {0}", grant.Permission); } } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 为对象设置预定义访问策略 以下代码展示如何为对象设置预定义访问策略: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 为对象设置预定义访问策略 try { SetObjectAclRequest request = new SetObjectAclRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.CannedAcl = CannedAclEnum.PublicRead; SetObjectAclResponse response = client.SetObjectAcl(request); Console.WriteLine("Set object acl response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 直接设置对象访问权限 以下代码展示如何直接设置对象访问权限: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 直接设置对象访权限 try { SetObjectAclRequest request = new SetObjectAclRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.AccessControlList = new AccessControlList(); Owner owner = new Owner(); owner.Id = "owerid"; request.AccessControlList.Owner = owner; Grant item = new Grant(); item.Permission = PermissionEnum.FullControl; item.Grantee = new GroupGrantee(GroupGranteeEnum.AllUsers); request.AccessControlList.Grants.Add(item); SetObjectAclResponse response = client.SetObjectAcl(request); Console.WriteLine("Set object acl response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } ACL中需要填写的所有者(Owner)或者被授权用户(Grantee)的ID,是指用户的帐号ID,可通过OBS控制台“我的凭证”页面查看。
  • 上传对象时指定预定义访问策略 以下代码展示如何在上传对象时指定预定义访问策略: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 上传对象设置预定义访问策略 try { PutObjectRequest request = new PutObjectRequest { BucketName = "bucketname", ObjectKey = "objectname", // 设置访问权限为公共读写 CannedAcl = CannedAclEnum.PublicReadWrite, }; PutObjectResponse response = client.PutObject(request); Console.WriteLine("Set object ac response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 获取上传进度 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过PutObjectRequest.UploadProgress注册System.EventHandler回调函数来获取上传的进度。示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 上传文件 try { PutObjectRequest request = new PutObjectRequest() { BucketName = "bucketname", ObjectKey = "objectname", FilePath = "localfile",// 上传的本地文件路径,需要指定到具体的文件名 }; // 以传输字节数为基准反馈上传进度 request.ProgressType = ProgressTypeEnum.ByBytes; // 每上传1MB数据反馈上传进度 request.ProgressInterval = 1024 * 1024; // 注册上传进度回调函数 request.UploadProgress += delegate(object sender, TransferStatus status){ // 获取上传平均速率 Console.WriteLine("AverageSpeed: {0}", status.AverageSpeed / 1024 + "KB/S"); // 获取上传进度百分比 Console.WriteLine("TransferPercentage: {0}", status.TransferPercentage); }; PutObjectResponse response = client.PutObject(request); Console.WriteLine("put object response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 支持获取上传进度的接口包括:流式上传、文件上传、异步上传、上传段、追加上传和断点续传上传。 父主题: 上传对象
  • 列举分段上传任务 您可以通过ObsClient.ListMultipartUploads列举分段上传任务。列举分段上传任务可设置的参数如下: 参数 作用 OBS .NET SDK对应属性 BucketName 桶名。 ListMultipartUploadsRequest.BucketName Prefix 限定返回的分段上传任务中的对象名必须带有prefix前缀。 ListMultipartUploadsRequest.Prefix Delimiter 用于对分段上传任务中的对象名进行分组的字符。对于对象名中包含Delimiter的任务,其对象名(如果请求中指定了Prefix,则此处的对象名需要去掉Prefix)中从首字符至第一个Delimiter之间的字符串将作为一个分组并作为CommonPrefix返回。 ListMultipartUploadsRequest.Delimiter MaxUploads 列举分段上传任务的最大数目,取值范围为1~1000,当超出范围时,按照默认的1000进行处理。 ListMultipartUploadsRequest.MaxUploads KeyMarker 表示列举时返回指定的keyMarker之后的分段上传任务。 ListMultipartUploadsRequest.KeyMarker UploadIdMarker 只有与KeyMarker参数一起使用时才有意义,用于指定返回结果的起始位置,即列举时返回指定KeyMarker的UploadIdMarker之后的分段上传任务。 ListMultipartUploadsRequest.UploadIdMarker 简单列举分段上传任务 // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); //简单列举分段上传任务 try { ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(); listMultipartUploadsRequest.BucketName = "bucketname"; ListMultipartUploadsResponse listMultipartUploadsResponse = client.ListMultipartUploads(listMultipartUploadsRequest); Console.WriteLine("ListMultipartUploadsResponse status code: " + listMultipartUploadsResponse.StatusCode); foreach (MultipartUpload upload in listMultipartUploadsResponse.MultipartUploads) { Console.WriteLine("ObjectKey {0}: " , upload.ObjectKey); Console.WriteLine("Initiated {0}: " , upload.Initiated); Console.WriteLine("\n"); } } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 列举分段上传任务至多返回1000个任务信息,如果指定的桶包含的分段上传任务数量大于1000,则ListMultipartUploadsResponse.isTruncated为true表明本次没有返回全部结果,并可通过ListMultipartUploadsResponse.NextKeyMarker和ListMultipartUploadsResponse.NextUploadIdMarker获取下次列举的起点。 如果想获取指定桶包含的所有分段上传任务,可以采用分页列举的方式。 分页列举全部分段上传任务 // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); //列举全部分段上传任务 try { ListMultipartUploadsRequest request = new ListMultipartUploadsRequest(); request.BucketName = "bucketname"; ListMultipartUploadsResponse response; do { response = client.ListMultipartUploads(request); Console.WriteLine("ListMultipartUploadsResponse status code: " + response.StatusCode); foreach (MultipartUpload upload in response.MultipartUploads) { Console.WriteLine("ObjectKey {0}: " , upload.ObjectKey); Console.WriteLine("Initiated {0}: " , upload.Initiated); Console.WriteLine("\n"); } request.KeyMarker = response.NextKeyMarker; request.UploadIdMarker = response.NextUploadIdMarker; } while (response.IsTruncated); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 上传段 初始化一个分段上传任务之后,可以根据指定的对象名和UploadId来分段上传数据。每一个上传的段都有一个标识它的号码——分段号(PartNumber,范围是1~10000)。对于同一个UploadId,该分段号不但唯一标识这一段数据,也标识了这段数据在整个对象内的相对位置。如果您用同一个分段号上传了新的数据,那么OBS上已有的这个段号的数据将被覆盖。除了最后一段以外,其他段的大小范围是100KB~5GB;最后段大小范围是0~5GB。每个段不需要按顺序上传,甚至可以在不同进程、不同机器上上传,OBS会按照分段号排序组成最终对象。 您可以通过ObsClient.UploadPart上传段。 上传段接口要求除最后一段以外,其他的段大小都要大于100KB。但是上传段接口并不会立即校验上传段的大小(因为不知道是否为最后一块);只有调用合并段接口时才会校验。 OBS会将服务端收到段数据的ETag值(段数据的MD5值)返回给用户。 分段号的范围是1~10000。如果超出这个范围,OBS将返回400 Bad Request错误。 OBS 3.0的桶支持最小段的大小为100KB,OBS 2.0的桶支持最小段的大小为5MB。请在OBS 3.0的桶上执行分段上传操作。
  • 取消分段上传任务 分段上传任务可以被取消,当一个分段上传任务被取消后,就不能再使用其UploadId做任何操作,已经上传段也会被OBS服务端删除。 采用分段上传方式上传对象过程中或上传对象失败后会在桶内产生段,这些段会占用您的存储空间,您可以通过取消该分段上传任务来清理掉不需要的段,节约存储空间。 您可以通过ObsClient.AbortMultipartUpload取消分段上传任务,示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); //取消分段上传任务 try { AbortMultipartUploadRequest request = new AbortMultipartUploadRequest { BucketName = "bucketname", ObjectKey = "objectname", UploadId = "uploadId",//待取消的分段上传任务的Id }; AbortMultipartUploadResponse response = client.AbortMultipartUpload(request); Console.WriteLine("Abort multipart upload response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 列举已上传的段 您可使用ObsClient.ListParts列举出某一分段上传任务所有已经上传成功的段。 该接口可设置的参数如下: 参数 作用 OBS .NET SDK对应属性 BucketName 分段上传任务所属的桶名。 ListPartsRequest.BucketName ObjectKey 分段上传任务所属的对象名。 ListPartsRequest.ObjectKey UploadId 分段上传任务全局唯一标识,从InitiateMultipartUpload返回的结果获取。 ListPartsRequest.UploadId MaxParts 表示列举已上传的段返回结果最大段数目,即分页时每一页中段数目。 ListPartsRequest.MaxParts PartNumberMarker 表示待列出段的起始位置,只有Part Number大于该参数的段会被列出。 ListPartsRequest.PartNumberMarker 简单列举 // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 简单列举 try { ListPartsRequest request = new ListPartsRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.UploadId = "uploadId"; ListPartsResponse response = client.ListParts(request); Console.WriteLine("List parts response: {0}", response.StatusCode); foreach (PartDetail part in response.Parts) { Console.WriteLine("PartNumber: " + part.PartNumber); Console.WriteLine("Size: " + part.Size); Console.WriteLine("ETag: " + part.ETag); Console.WriteLine("LastModified: " + part.LastModified); } } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 列举段至多返回1000个段信息,如果指定的Upload ID包含的段数量大于1000,则返回结果中ListPartsResult.isTruncated为true表明本次没有返回全部段,并可通过ListPartsRespon.NextPartNumberMarker获取下次列举的起始位置。 列举所有段 由于ObsClient.ListParts只能列举至多1000个段,如果段数量大于1000,列举所有分段请参考如下示例: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 列举所有段 try { ListPartsRequest request = new ListPartsRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.UploadId = "uploadId"; ListPartsResponse response; do { response = client.ListParts(request); Console.WriteLine("List parts response: {0}", response.StatusCode); foreach (PartDetail part in response.Parts) { Console.WriteLine("PartNumber: " + part.PartNumber); Console.WriteLine("Size: " + part.Size); Console.WriteLine("ETag: " + part.ETag); Console.WriteLine("LastModified: " + part.LastModified); } request.PartNumberMarker = response.NextPartNumberMarker; } while (response.IsTruncated); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
  • 初始化分段上传任务 使用分段上传方式传输数据前,必须先通知OBS初始化一个分段上传任务。该操作会返回一个OBS服务端创建的全局唯一标识(UploadId),用于标识本次分段上传任务。您可以根据这个唯一标识来发起相关的操作,如取消分段上传任务、列举分段上传任务、列举已上传的段等。 您可以通过ObsClient.InitiateMultipartUpload初始化一个分段上传任务。 用InitiateMultipartUploadRequest指定上传对象的名称和所属桶。 在InitiateMultipartUploadRequest中,您可以设置对象MIME类型、对象存储类型、对象自定义元数据等对象属性。 InitiateMultipartUploadResponse.UploadId返回分段上传任务的全局唯一标识(UploadId),在后面的操作中将用到它。
  • 查看生命周期规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.GetBucketLifecycle查看桶的生命周期规则。以下代码展示了如何查看桶的生命周期规则: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 查看桶的生命周期 try { GetBucketLifecycleRequest request = new GetBucketLifecycleRequest(); request.BucketName = "bucketname"; GetBucketLifecycleResponse response = client.GetBucketLifecycle(request); foreach (LifecycleRule lifecycleRule in response.Configuration.Rules) { Console.WriteLine("Lifecycle rule id: {0}", lifecycleRule.Id); Console.WriteLine("Lifecycle rule prefix: {0}", lifecycleRule.Prefix); Console.WriteLine("Lifecycle rule status: {0}", lifecycleRule.Status); if (null != lifecycleRule.Expiration) { Console.WriteLine("expiration days: {0}", lifecycleRule.Expiration.Days); } if (null != lifecycleRule.NoncurrentVersionExpiration) { Console.WriteLine("NoncurrentVersionExpiration NoncurrentDays: {0}", lifecycleRule.NoncurrentVersionExpiration.NoncurrentDays); } foreach (Transition transition in lifecycleRule.Transitions) { Console.WriteLine("Transition Days : {0}", transition.Days); Console.WriteLine("Transition StorageClass : {0}", transition.StorageClass); } foreach (NoncurrentVersionTransition noncurrentVersionTransition in lifecycleRule.NoncurrentVersionTransitions) { Console.WriteLine("NoncurrentVersionTransition NoncurrentDays: {0}", noncurrentVersionTransition.NoncurrentDays); Console.WriteLine("NoncurrentVersionTransition StorageClass : {0}", noncurrentVersionTransition.StorageClass); } Console.WriteLine("Get bucket lifecycle response: {0}", response.StatusCode); } } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 父主题: 生命周期管理
共100000条