华为云用户手册

  • 查看桶标签 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.GetBucketTagging查看桶标签。以下代码展示了如何查看桶标签: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 获取桶标签try{ GetBucketTaggingRequest request = new GetBucketTaggingRequest { BucketName = "bucketname", }; GetBucketTaggingResponse response = client.GetBucketTagging(request); foreach (Tag tag in response.Tags) { Console.WriteLine("Get bucket Tagging response Key: {0}" + tag.Key); Console.WriteLine("Get bucket Tagging response Value:{0} " + tag.Value); }}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.htmlstring 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,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 下载对象时,可以重写部分HTTP/HTTPS响应头信息。可重写的响应头信息见下表: 参数 作用 OBS .NET SDK对应属性 ContentType 重写HTTP/HTTPS响应中的Content-Type GetObjectRequest.ResponseHeaderOverrides.ContentType ContentLanguage 重写HTTP/HTTPS响应中的Content-Language GetObjectRequest.ResponseHeaderOverrides.ContentLanguage Expires 重写HTTP/HTTPS响应中的Expires ObjectRepleaceMetadata.Expires CacheControl 重写HTTP/HTTPS响应中的Cache-Control GetObjectRequest.ResponseHeaderOverrides.CacheControl ContentDisposition 重写HTTP/HTTPS响应中的Content-Disposition GetObjectRequest.ResponseHeaderOverrides.ContentDisposition ContentEncoding 重写HTTP/HTTPS响应中的Content-Encoding GetObjectRequest.ResponseHeaderOverrides.ContentEncoding 以下代码展示了如何重写响应头: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 下载对象时重写响应头try{ ResponseHeaderOverrides responseHeaderOverrides = new ResponseHeaderOverrides(); responseHeaderOverrides.ContentType = "image/jpeg"; GetObjectRequest request = new GetObjectRequest() { BucketName = "bucketname", ObjectKey = "objectname", ResponseHeaderOverrides = responseHeaderOverrides, }; GetObjectResponse response = client.GetObject(request); Console.WriteLine("Get object response: {0}", response.StatusCode); Console.WriteLine("ContentType: {0}", response.ContentType); response.Dispose();}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 父主题: 下载对象
  • 删除单个多版本对象 您可以通过ObsClient.DeleteObject接口传入版本号(VersionId)删除多版本对象。 本示例用于通过设置多版本对象的VersionId值,删除桶名为“bucketname”里,名称为“objectname”的对象。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 删除单个多版本对象try{ DeleteObjectRequest request = new DeleteObjectRequest() { BucketName = "buckername", ObjectKey = "objectname", VersionId = "versionId" }; DeleteObjectResponse response = client.DeleteObject(request); Console.WriteLine("Delete object response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);}
  • 下载归档存储对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 如果要下载归档存储对象,需要先将归档存储对象恢复。恢复归档存储对象的恢复选项可支持两类,见下表: 选项 说明 OBS .NET SDK对应值 快速恢复 恢复耗时1~5分钟。 RestoreTierEnum.Expedited 标准恢复 恢复耗时3~5小时。默认值。 RestoreTierEnum.Standard 重复恢复归档存储数据时在延长恢复有效期的同时,也将会对恢复时产生的恢复费用进行重复收取。产生的标准存储类别的对象副本有效期将会延长,并且收取延长时间段产生的标准存储副本费用。 您可以通过ObsClient.RestoreObject恢复归档存储对象。以下代码展示了如何下载归档存储对象: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);try{ RestoreObjectRequest request = new RestoreObjectRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.Days = 5; request.Tier = RestoreTierEnum.Expedited; // 可选参数,默认情况下,恢复的是最新版本的对象。如果要恢复指定版本的对象,则可携带versionId参数 // request.VersionId = "versionId"; RestoreObjectResponse response = client.RestoreObject(request); Console.WriteLine("Restore object response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} ObsClient.RestoreObject中指定的对象必须是归档存储类型,否则调用该接口会抛出异常。 RestoreObjectRequest.Days指定恢复对象保存的时间,取值范围是1~30。 RestoreObjectRequest.Tier指定恢复选项,表示恢复对象所耗的时间。 父主题: 下载对象
  • 批量删除多版本对象 您可以通过ObsClient.DeleteObjects接口传入每个待删除对象的版本号(VersionId)批量删除多版本对象。 本示例用于通过设置多版本对象的VersionId值,批量删除桶名为“bucketname”里,名称为“objectname1”和“objectname2”的对象。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 删除两个多版本对象try{ DeleteObjectsRequest request = new DeleteObjectsRequest(); request.BucketName = "bucketname"; request.Quiet = true; request.AddKey("objectName1", "versionId1"); request.AddKey("objectName2", "versionId2"); DeleteObjectsResponse response = client.DeleteObjects(request); Console.WriteLine("Delete objects 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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 配置重定向规则try{ SetBucketWebsiteRequest request = new SetBucketWebsiteRequest(); request.BucketName = "bucketname"; request.Configuration = new WebsiteConfiguration(); //配置默认主页 request.Configuration.IndexDocument= "index.html"; //配置错误页面 request.Configuration.ErrorDocument = "error.html"; RoutingRule routingRule = new RoutingRule(); routingRule.Redirect = new Redirect(); routingRule.Redirect.HostName = "www.example.com"; routingRule.Redirect.HttpRedirectCode = "305"; routingRule.Redirect.Protocol = ProtocolEnum.Http; routingRule.Redirect.ReplaceKeyPrefixWith = "replacekeyprefix"; routingRule.Condition = new Condition(); routingRule.Condition.HttpErrorCodeReturnedEquals = "404"; routingRule.Condition.KeyPrefixEquals = "keyprefix"; request.Configuration.RoutingRules.Add(routingRule); SetBucketWebsiteResponse response = client.SetBucketWebsiteConfiguration(request); Console.WriteLine("Set bucket website 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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 配置所有请求重定向try{ SetBucketWebsiteRequest request = new SetBucketWebsiteRequest(); request.BucketName = "bucketname"; request.Configuration = new WebsiteConfiguration(); request.Configuration.RedirectAllRequestsTo = new RedirectBasic(); request.Configuration.RedirectAllRequestsTo.HostName = "www.example.com"; request.Configuration.RedirectAllRequestsTo.Protocol = ProtocolEnum.Https; SetBucketWebsiteResponse response = client.SetBucketWebsiteConfiguration(request); Console.WriteLine("Set bucket website 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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//配置默认主页和错误页面try{ SetBucketWebsiteRequest request = new SetBucketWebsiteRequest(); request.BucketName = "bucketname"; request.Configuration = new WebsiteConfiguration(); //配置默认主页 request.Configuration.IndexDocument = "index.html"; //配置错误页面 request.Configuration.ErrorDocument = "error.html"; SetBucketWebsiteResponse response = client.SetBucketWebsiteConfiguration(request); Console.WriteLine("Set bucket website response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);}
  • 获取多版本对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.GetObject接口传入版本号(VersionId)来获取多版本对象。 本示例用于下载桶名为“bucketname”里,名称为“objectname”,指定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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 获取多版本对象try{ GetObjectRequest getObjectRequest = new GetObjectRequest() { BucketName = "bucketname", ObjectKey = "objectname", VersionId = "versionId", }; using (GetObjectResponse response = client.GetObject(getObjectRequest)) { Console.WriteLine("Get object response: {0}", response.StatusCode); //将文件保存到本地 if (!File.Exists("savePath")) { response.WriteResponseStreamToFile("savePath"); } }}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 如果版本号为空则默认下载最新版本的对象。 父主题: 多版本控制
  • OBS服务端错误码 在向OBS服务端发出请求后,如果遇到错误,会在响应中包含响应的错误码描述错误信息。详细的错误码及其对应的描述和HTTP状态码见下表: 错误码 描述 HTTP状态码 AccessDenied 拒绝访问。 403 Forbidden AccessForbidden 权限不足。 403 Forbidden AccountProblem 用户的账户出现异常(过期、冻结等),不能成功地完成操作。 403 Forbidden AllAccessDisabled 用户无权限执行某操作。 403 Forbidden AmbiguousGrantByEmailAddress 用户提供的Email地址关联的账户超过了1个。 400 Bad Request BadDigest 客户端指定的对象内容的MD5值与系统接收到的内容MD5值不一致。 400 Bad Request BadDomainName 域名 不合法。 400 Bad Request BadRequest 请求参数不合法。 400 Bad Request BucketAlreadyExists 请求的桶名已经存在。桶的命名空间是系统中所有用户共用的,选择一个不同的桶名再重试一次。 409 Conflict BucketAlreadyOwnedByYou 发起该请求的用户已经创建过了这个名字的桶,并拥有这个桶。 409 Conflict BucketNotEmpty 用户尝试删除的桶不为空。 409 Conflict CredentialsNotSupported 该请求不支持证书验证。 400 Bad Request CustomDomainAreadyExist 配置了已存在的域。 400 Bad Request CustomDomainNotExist 操作的域不存在。 400 Bad Request DeregisterUserId 用户已经注销。 403 Forbidden EntityTooSmall 用户试图上传的对象大小小于系统允许的最小大小。 400 Bad Request EntityTooLarge 用户试图上传的对象大小超过了系统允许的最大大小。 400 Bad Request FrozenUserId 用户被冻结。 403 Forbidden IllegalVersioningConfiguration Exception 请求中的版本配置无效。 400 Bad Request IllegalLocationConstraintException 配置了与所在Region不匹配的区域限制。 400 Bad Request InArrearOrInsufficientBalance 用户欠费或余额不足而没有权限进行某种操作。 403 Forbidden IncompleteBody 请求体不完整。 400 Bad Request IncorrectNumberOfFilesInPost Request 每个POST请求都需要带一个上传的文件。 400 Bad Request InlineDataTooLarge Inline Data超过了允许的最大长度。 400 Bad Request InsufficientStorageSpace 存储空间不足。 403 Forbidden InternalError 系统遇到内部错误,请重试。 500 Internal Server Error InvalidAccessKeyId 系统记录中不存在客户提供的Access Key Id。 403 Forbidden InvalidAddressingHeader 用户必须指定匿名角色。 N/A InvalidArgument 无效的参数。 400 Bad Request InvalidBucketName 请求中指定的桶名无效。 400 Bad Request InvalidBucket 请求访问的桶已不存在。 400 Bad Request InvalidBucketState 无效的桶状态。 409 Conflict InvalidBucketStoragePolicy 修改桶策略时,提供的新策略不合法。 400 Bad Request InvalidDigest HTTP头中指定的Content-MD5值无效。 400 Bad Request InvalidEncryptionAlgorithmError 错误的加密算法。 400 Bad Request InvalidLocationConstraint 创建桶时,指定的location不合法。 400 Bad Request InvalidPart 一个或多个指定的段无法找到。这些段可能没有上传,或者指定的entity tag与段的entity tag不一致。 400 Bad Request InvalidPartOrder 段列表的顺序不是升序,段列表必须按段号升序排列。 400 Bad Request InvalidPayer 所有对这个对象的访问已经无效了。 403 Forbidden InvalidPolicyDocument 表单中的内容与策略文档中指定的条件不一致。 400 Bad Request InvalidRange 请求的range不可获得。 416 Client Requested Range Not Satisfiable InvalidRedirectLocation 无效的重定向地址。 400 Bad Request InvalidRequest 无效请求。 400 Bad Request InvalidRequestBody POST请求体无效。 400 Bad Request InvalidSecurity 提供的安全证书无效。 403 Forbidden InvalidStorageClass 用户指定的Storage Class无效。 400 Bad Request InvalidTargetBucketForLogging delivery group对目标桶无ACL权限。 400 Bad Request InvalidURI 无法解析指定的URI。 400 Bad Request KeyTooLong 提供的Key过长。 400 Bad Request MalformedACLError 提供的XML格式错误,或者不符合要求的格式。 400 Bad Request MalformedError 请求中携带的XML格式不正确。 400 Bad Request MalformedLoggingStatus Logging的XML格式不正确。 400 Bad Request MalformedPolicy Bucket policy检查不通过。 400 Bad Request MalformedPOSTRequest POST请求的请求体不是结构化良好的多段或形式化数据。 400 Bad Request MalformedQuotaError Quota的XML格式不正确。 400 Bad Request MalformedXML 当用户发送了一个配置项的错误格式的XML会出现这样的错误。错误消息是:“The XML you provided was not well-formed or did not validate against our published schema.”。 400 Bad Request MaxMessageLengthExceeded 请求消息过长。 400 Bad Request MaxPostPreDataLengthExceeded Error 在上传文件前面的POST请求域过大。 400 Bad Request MetadataTooLarge 元数据消息头超过了允许的最大元数据大小。 400 Bad Request MethodNotAllowed 指定的方法不允许操作在请求的资源上。 对应返回的Message为:Specified method is not supported. 405 Method Not Allowed MissingContentLength 必须要提供HTTP消息头中的Content-Length字段。 411 Length Required MissingRegion 请求中缺少Region信息,且系统无默认Region。 400 Bad Request MissingRequestBodyError 当用户发送一个空的XML文档作为请求时会发生。错误消息是:“Request body is empty.”。 400 Bad Request MissingRequiredHeader 请求中缺少必要的头域。 400 Bad Request MissingSecurityHeader 请求缺少一个必须的头。 400 Bad Request NoSuchBucket 指定的桶不存在。 404 Not Found NoSuchBucketPolicy 桶policy不存在。 404 Not Found NoSuchCORSConfiguration CORS配置不存在。 404 Not Found NoSuchCustomDomain 请求的用户域不存在。 404 Not Found NoSuchKey 指定的Key不存在。 404 Not Found NoSuchLifecycleConfiguration 请求的LifeCycle不存在。 404 Not Found NoSuchPolicy 给定的policy名字不存在。 404 Not Found NoSuchUpload 指定的多段上传不存在。Upload ID不存在,或者多段上传已经终止或完成。 404 Not Found NoSuchVersion 请求中指定的version ID与现存的所有版本都不匹配。 404 Not Found NoSuchWebsiteConfiguration 请求的Website不存在。 404 Not Found NotImplemented 用户提供的消息头功能上还没有实现。 501 Not Implemented NotSignedUp 账户未在系统中注册,必须先在系统中注册了才能使用该账户。 403 Forbidden OperationAborted 另外一个冲突的操作当前正作用在这个资源上,请重试。 409 Conflict PermanentRedirect 尝试访问的桶必须使用指定的节点,请将以后的请求发送到这个节点。 301 Moved Permanently PreconditionFailed 用户指定的先决条件中至少有一项没有包含。 412 Precondition Failed Redirect 临时重定向。 307 Moved Temporarily RequestIsNotMultiPartContent 桶POST必须是闭式的多段/表单数据。 400 Bad Request RequestTimeout 用户与Server之间的socket连接在超时时间内没有进行读写操作。 400 Bad Request RequestTimeTooSkewed 请求的时间与服务器的时间相差太大。 403 Forbidden RequestTorrentOfBucketError 不允许请求桶的torrent文件。 400 Bad Request ServiceNotImplemented 请求的方法服务端没有实现。 501 Not Implemented ServiceNotSupported 请求的方法服务端不支持。 409 Conflict ServiceUnavailable 服务器过载或者内部错误异常。 503 Service Unavailable SignatureDoesNotMatch 请求中带的签名与系统计算得到的签名不一致。检查您的访问密钥(AK和SK)和签名计算方法。 403 Forbidden SlowDown 请降低请求频率。 503 Service Unavailable System Capacity Not enough 系统空间不足异常。 403 Forbidden TooManyCustomDomains 配置了过多的用户域。 400 Bad Request TemporaryRedirect 当DNS更新时,请求将被重定向到桶。 307 Moved Temporarily TooManyBuckets 用户拥有的桶的数量达到了系统的上限,并且请求试图创建一个新桶。 400 Bad Request TooManyObjectCopied 用户单个对象被拷贝的数量超过系统上限。 400 Bad Request TooManyWrongSignature 因高频错误请求被拒绝服务。 400 Bad Request UnexpectedContent 该请求不支持带内容字段。 400 Bad Request UnresolvableGrantByEmailAddress 用户提供的Email与记录中任何账户的都不匹配。 400 Bad Request UserKeyMustBeSpecified 请求中缺少用户的AK信息。 400 Bad Request WebsiteRedirect Website请求缺少bucketName。 301 Moved Permanently KMS.DisabledException SSE-KMS加密方式下,主密钥被禁用。 400 Bad Request KMS.NotFoundException SSE-KMS加密方式下,主密钥不存在。 400 Bad Request RestoreAlreadyInProgress 对象正在恢复,请求冲突。 409 Conflict ObjectHasAlreadyRestored 已经恢复的对象,禁止缩短恢复保存时间。 409 Conflict InvalidObjectState 恢复对象不是归档存储对象。 403 Forbidden InvalidTagError 配置桶标签时,提供了无效的Tag。 400 Bad Request NoSuchTagSet 指定的桶没有设置标签。 404 Not Found 父主题: 异常处理
  • 清除托管配置 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.DeleteBucketWebsite清除桶的托管配置。 本示例用于清除桶名为“bucketname”的托管配置。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 清除托管配置try{ DeleteBucketWebsiteRequest request = new DeleteBucketWebsiteRequest(); request.BucketName = "bucketname"; DeleteBucketWebsiteResponse response = client.DeleteBucketWebsite(request); Console.WriteLine("Delete bucket website response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 清除桶托管配置过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 静态网站托管
  • 分析方法 分析定位问题或查看运行状态时,可根据日期查找到相应的日志文件,再通过日志文件的日志记录进行分析。 分析的具体步骤如下: 查找日志信息。 根据错误发生时间及操作的相关信息,日志文件目录下查找相关的接口日志,日志示例如下。 2018-05-23 21:55:02,103 [9] INFO - ListObjectsRequest begin.2018-05-23 21:55:02,526 [9] INFO - Send http request end, cost 385 ms2018-05-23 21:55:02,536 [9] ERROR - Rethrowing as a ObsException error in PerformRequestRequest error, StatusCode:404, ErrorCode:NoSuchBucket, ErrorMessage:The specified bucket does not exist, RequestId:0403000001638D4819383F2D4A2B2C50, HostId:N8OMsHew7O/LMHua8qpm49geWphVJI6l2mnnzUIYwQwHAuzJw/kmV+O4iIcf0GRR2018-05-23 21:55:02,548 [9] ERROR - ListObjectsRequest exception code: NoSuchBucket, with message: Request error2018-05-23 21:55:02,553 [9] INFO - ListObjectsRequest end, cost 449 ms 根据错误日志信息分析错误原因。 例如,从日志文件中获取到错误码"NoSuchBucket",通过查看对照OBS服务端错误码,得知实际的错误信息为“指定bucket不存在”。
  • 指定前缀列举 以下代码展示如何指定前缀列举多版本对象: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//指定前缀列举try{ ListVersionsRequest request = new ListVersionsRequest(); request.BucketName = "bucketname"; request.MaxKeys = 100; request.Prefix = "prefix"; ListVersionsResponse response = client.ListVersions(request); foreach (ObsObjectVersion objectVersion in response.Versions) { Console.WriteLine("Key: {0}", objectVersion.ObjectKey); Console.WriteLine("VersionId: {0}", objectVersion.VersionId); } Console.WriteLine("List versions 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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//指定起始位置列举try{ ListVersionsRequest request = new ListVersionsRequest(); request.BucketName = "bucketname"; request.MaxKeys = 100; request.Prefix = "prefix"; request.KeyMarker = "keyMarker"; ListVersionsResponse response = client.ListVersions(request); foreach (ObsObjectVersion objectVersion in response.Versions) { Console.WriteLine("Key: {0}", objectVersion.ObjectKey); Console.WriteLine("VersionId: {0}", objectVersion.VersionId); } Console.WriteLine("List versions response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);}
  • 判断对象是否存在 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.HeadObject来判断指定的对象是否存在。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 判断指定的对象是否存在try{ HeadObjectRequest request = new HeadObjectRequest() { BucketName = "bucketName", ObjectKey = "objectKey" }; bool response = client.HeadObject(request); Console.WriteLine("Head object response: {0}", response);}catch (ObsException ex){ Console.WriteLine("Exception errorcode: {0}, when head object.", ex.ErrorCode); Console.WriteLine("Exception errormessage: {0}", ex.ErrorMessage);} 如果抛出异常且HTTP状态码为404,表明桶不存在。 父主题: 管理对象
  • 简单列举 以下代码展示如何简单列举多版本对象,最多返回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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//列举多版本对象try{ ListVersionsRequest request = new ListVersionsRequest(); request.BucketName = "bucketname"; ListVersionsResponse response = client.ListVersions(request); foreach (ObsObjectVersion objectVersion in response.Versions) { Console.WriteLine("Key: {0}", objectVersion.ObjectKey); Console.WriteLine("VersionId: {0}", objectVersion.VersionId); } Console.WriteLine("List versions response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 每次至多返回1000个多版本对象,如果指定桶包含的对象数量大于1000,则返回结果中ListVersionsResponse.IsTruncated为true表明本次没有返回全部对象,并可通过ListVersionsResponse.NextKeyMarker和ListVersionsResponse.NextVersionIdMarker获取下次列举的起始位置。
  • 指定数目列举 以下代码展示如何指定数目列举多版本对象: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//指定数目列举try{ ListVersionsRequest request = new ListVersionsRequest(); request.BucketName = "bucketname"; request.MaxKeys = 100; ListVersionsResponse response = client.ListVersions(request); foreach (ObsObjectVersion objectVersion in response.Versions) { Console.WriteLine("Key: {0}", objectVersion.ObjectKey); Console.WriteLine("VersionId: {0}", objectVersion.VersionId); } Console.WriteLine("List versions response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);}
  • 列举文件夹中的所有多版本对象 OBS本身是没有文件夹的概念的,桶中存储的元素只有对象。文件夹对象实际上是一个大小为0且对象名以“/”结尾的对象,将这个文件夹对象名作为前缀,即可模拟列举文件夹中对象的功能。以下代码展示如何列举文件夹中的多版本对象: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//分页列举全部多版本对象try{ ListVersionsRequest request = new ListVersionsRequest(); request.BucketName = "bucketname"; request.MaxKeys = 1000; // 设置文件夹对象名"dir/"为前缀 request.Prefix = "dir/"; ListVersionsResponse response; do { response = client.ListVersions(request); Console.WriteLine("List versions response: {0}", response.StatusCode); foreach (ObsObjectVersion objectVersion in response.Versions) { Console.WriteLine("Key: {0}", objectVersion.ObjectKey); Console.WriteLine("VersionId: {0}", objectVersion.VersionId); } request.KeyMarker = response.NextKeyMarker; request.VersionIdMarker = response.NextVersionIdMarker; } while (response.IsTruncated);}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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//分页列举全部多版本对象try{ ListVersionsRequest request = new ListVersionsRequest(); request.BucketName = "bucketname"; request.MaxKeys = 100; ListVersionsResponse response; do { response = client.ListVersions(request); Console.WriteLine("List versions response: {0}", response.StatusCode); foreach (ObsObjectVersion objectVersion in response.Versions) { Console.WriteLine("Key: {0}", objectVersion.ObjectKey); Console.WriteLine("VersionId: {0}", objectVersion.VersionId); } request.KeyMarker = response.NextKeyMarker; request.VersionIdMarker = response.NextVersionIdMarker; } while (response.IsTruncated);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);}
  • 查看生命周期规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.GetBucketLifecycle查看桶的生命周期规则。 本示例用于查看桶名为“bucketname”的生命周期规则。 代码示例如下所示: // 初始化配置参数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.htmlstring 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);} 查看生命周期规则过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 生命周期管理
  • 恢复多版本归档存储对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.RestoreObject接口传入版本号(VersionId)来恢复多版本归档存储对象。 本示例用于通过设置versionId值将destbucketname桶中destobjectname的多版本归档存储对象,快速恢复为标准存储对象。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 恢复多版本归档存储对象try{ RestoreObjectRequest request = new RestoreObjectRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.Days = 5; // 使用快速恢复方式,恢复多版本对象 request.Tier = RestoreTierEnum.Expedited; request.VersionId = "versionId"; RestoreObjectResponse response = client.RestoreObject(request); Console.WriteLine("Restore object response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 重复恢复归档存储数据时在延长恢复有效期的同时,也将会对恢复时产生的恢复费用进行重复收取。产生的标准存储类别的对象副本有效期将会延长,并且收取延长时间段产生的标准存储副本费用。 父主题: 多版本控制
  • 复制多版本对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.CopyObject接口传入版本号(SourceVersionId )来复制多版本对象。 本示例用于通过设置SourceVersionId 复制sourcebucketname桶中sourceobjectname的多版本对象,复制到destbucketname桶中destobjectname。 代码示例如下所示: // 初始化配置参数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.htmlstring 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);} 复制多版本对象过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 多版本控制
  • 删除生命周期规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.DeleteBucketLifecycle删除桶的生命周期规则。 本示例用于删除桶名为“bucketname”的生命周期规则。 代码示例如下所示: // 初始化配置参数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.htmlstring 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);} 删除生命周期规则过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 生命周期管理
  • 生命周期管理简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS允许您对桶设置生命周期规则,实现自动转换对象的存储类型、自动淘汰过期的对象,以有效利用存储特性,优化存储空间。针对不同前缀的对象,您可以同时设置多条规则。一条规则包含: 规则ID,用于标识一条规则,不能重复。 受影响的对象前缀,此规则只作用于符合前缀的对象。 最新版本对象的转换策略,指定方式为: 指定满足前缀的对象创建后第几天时转换为指定的存储类型。 直接指定满足前缀的对象转换为指定的存储类型的日期。 最新版本对象过期时间,指定方式为: 指定满足前缀的对象创建后第几天时过期。 直接指定满足前缀的对象过期日期。 历史版本对象转换策略,指定方式为: 指定满足前缀的对象成为历史版本后第几天时转换为指定的存储类型。 历史版本对象过期时间,指定方式为: 指定满足前缀的对象成为历史版本后第几天时过期。 是否生效标识。 更多关于生命周期的内容请参考生命周期管理。 对象过期后会被OBS服务端自动删除。 对象转换策略中的时间必须早于对象过期时间;历史版本对象转换策略中的时间也必须早于历史版本对象的过期时间。 桶的多版本状态必须处于Enabled或者Suspended,历史版本对象转换策略和历史版本对象过期时间配置才能生效。 父主题: 生命周期管理
  • 查看托管配置 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.GetBucketWebsite查看桶的托管配置。 本示例用于查看桶名为“bucketname”的托管配置。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 查看托管配置try{ GetBucketWebsiteRequest request = new GetBucketWebsiteRequest(); request.BucketName = "bucketname"; GetBucketWebsiteResponse response = client.GetBucketWebsite(request); Console.WriteLine("GetBucketWebsite website configuration error document: {0}", response.Configuration.ErrorDocument); Console.WriteLine("GetBucketWebsite website configuration index document: {0}", response.Configuration.IndexDocument); Console.WriteLine("Get bucket website response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 查看桶托管配置过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 静态网站托管
  • 查看跨域规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.GetBucketCors查看桶的跨域规则。 本示例用于查看桶名为“bucketname”的跨域规则。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 查看跨域规则try{ GetBucketCorsRequest request = new GetBucketCorsRequest(); request.BucketName = "bucketname"; GetBucketCorsResponse response = client.GetBucketCors(request); foreach (CorsRule rule in response.Configuration.Rules) { Console.WriteLine("rule id is: {0}\n", rule.Id); foreach (string allowOrigin in rule.AllowedOrigins) { Console.WriteLine("allowOrigin is: {0}\n", allowOrigin); } foreach (string allowHeader in rule.AllowedHeaders) { Console.WriteLine("allowHeader is: {0}\n", allowHeader); } foreach (HttpVerb allowMethod in rule.AllowedMethods) { Console.WriteLine("allowMethod is: {0}\n", allowMethod); } foreach (string exposeHeader in rule.ExposeHeaders) { Console.WriteLine("exposeHeader is: {0}\n", exposeHeader); } Console.WriteLine("rule maxAgeSeconds is: {0}\n", rule.MaxAgeSeconds); }}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 查看跨域规则过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 跨域资源共享
  • 删除跨域规则 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.DeleteBucketCors删除桶的跨域规则。 本示例用于删除桶名为“bucketname”的跨域规则。 代码示例如下所示: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 删除桶跨域规则try{ DeleteBucketCorsRequest request = new DeleteBucketCorsRequest(); request.BucketName = "bucketname"; DeleteBucketCorsResponse response = client.DeleteBucketCors(request); Console.WriteLine("Delete bucket cors response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 删除跨域规则过程中返回的错误码含义、问题原因及处理措施可参考OBS服务端错误码。 父主题: 跨域资源共享
  • 断点续传下载 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 当下载大对象到本地文件时,经常出现因网络不稳定或程序崩溃导致下载失败的情况。失败后再次重新下载不仅浪费资源,而且当网络不稳定时仍然有下载失败的风险。断点续传下载接口能有效地解决此类问题引起的下载失败,其原理是将待下载的对象分成若干个分段分别下载,并实时地将每段下载结果统一记录在Checkpoint文件中,仅当所有分段都下载成功时返回下载成功的结果,否则抛出异常提醒用户再次调用接口进行重新下载(重新下载时因为有Checkpoint文件记录当前的下载进度,避免重新下载所有分段,从而节省资源提高效率)。 您可以通过ObsClient.DownloadFile进行断点续传下载。该接口可设置的主要参数如下: 参数 作用 OBS .NET SDK对应属性 BucketName 桶名,必选参数。 DownloadFileRequest.BucketName ObjectKey 对象名,必选参数。 DownloadFileRequest.ObjectKey DownloadFile 下载对象的本地文件全路径。当该值为空时,默认为当前程序的运行目录。 DownloadFileRequest.DownloadFile DownloadPartSize 分段大小,单位字节,取值范围是5MB~5GB,默认为5MB。 DownloadFileRequest.DownloadPartSize EnableCheckpoint 是否开启断点续传模式,默认为false,表示不开启。 DownloadFileRequest.EnableCheckpoint CheckpointFile 记录下载进度的文件,只在断点续传模式下有效。当该值为空时,默认与下载对象的本地文件路径同目录。 DownloadFileRequest.CheckpointFile VersionId 对象的版本号。 DownloadFileRequest.VersionId TaskNum 分段下载时的最大并发数,默认为1。 DownloadFileRequest.TaskNum DownloadProgress 下载进度回调函数。 DownloadFileRequest.DownloadProgress ProgressType 下载进度反馈方式。 DownloadFileRequest.ProgressType ProgressInterval 下载进度反馈间隔。 DownloadFileRequest.ProgressInterval DownloadEventHandler 下载事件回调函数。 DownloadFileRequest.DownloadEventHandler 以下代码展示了如何使用断点续传下载接口下载对象到本地文件: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);// 断点续传下载文件try{ DownloadFileRequest request = new DownloadFileRequest { BucketName = "bucketname", ObjectKey = "objectname", // 待下载的本地文件路径 DownloadFile = "savepath", // 下载段大小为10MB DownloadPartSize = 1024 * 1024 * 10, // 开启断点续传模式 EnableCheckpoint = true, }; // 以传输字节数为基准反馈下载进度 request.ProgressType = ProgressTypeEnum.ByBytes; // 每下载1MB数据反馈下载进度 request.ProgressInterval = 1024 * 1024; // 注册下载进度回调函数 request.DownloadProgress += delegate(object sender, TransferStatus status){ // 获取下载平均速率 Console.WriteLine("AverageSpeed: {0}", status.AverageSpeed / 1024 + "KB/S"); // 获取下载进度百分比 Console.WriteLine("TransferPercentage: {0}", status.TransferPercentage); }; // 注册下载事件回调函数 request.DownloadEventHandler += delegate(object sender, ResumableDownloadEvent e){ // 获取下载事件 Console.WriteLine("EventType: {0}", e.EventType); }; GetObjectMetadataResponse response = client.DownloadFile(request); Console.WriteLine("Download File response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);} 断点续传下载接口是利用范围下载特性实现的,是对范围下载的封装和加强。 断点续传下载接口不仅能在失败重下时节省资源提高效率,还因其对分段进行并发下载的机制能加快下载速度,帮助用户快速完成下载业务;且其对用户透明,用户不用关心CheckpointFile文件的创建和删除、分段任务的切分、并发下载的实现等内部细节。 EnableCheckpoint参数默认是false,代表不启用断点续传模式,此时断点续传下载接口退化成对范围下载的简单封装,不会产生CheckpointFile文件。 CheckpointFile参数仅在EnableCheckpoint参数为true时有效。 父主题: 下载对象
  • 设置对象转换策略 以下代码展示了如何设置最新版本对象和历史版本对象的转换策略: // 初始化配置参数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.htmlstring accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine);string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine);// 创建ObsClient实例ObsClient client = new ObsClient(accessKey, secretKey, config);//设置对象转换策略try{ SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(); request.BucketName = "bucketname"; request.Configuration = new LifecycleConfiguration(); LifecycleRule rule1 = new LifecycleRule(); rule1.Id = "rule1"; rule1.Prefix = "prefix"; rule1.Status = RuleStatusEnum.Enabled; Transition transition = new Transition(); rule1.Transitions.Add(transition); // 指定满足前缀的对象创建30天后转换 transition.Days = 30; // 指定对象转换后的存储类型 transition.StorageClass = StorageClassEnum.Warm; NoncurrentVersionTransition noncurrentVersionTransition = new NoncurrentVersionTransition(); rule1.NoncurrentVersionTransitions.Add(noncurrentVersionTransition); // 指定满足前缀的对象成为历史版本60天后转换 noncurrentVersionTransition.NoncurrentDays = 60; // 指定历史版本对象转换后的存储类型 noncurrentVersionTransition.StorageClass = StorageClassEnum.Warm; request.Configuration.Rules.Add(rule1); SetBucketLifecycleResponse response = client.SetBucketLifecycle(request); Console.WriteLine("Set bucket lifecycle response: {0}", response.StatusCode);}catch (ObsException ex){ Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage);}
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全