华为云用户手册

  • OBS客户端通用示例 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效,返回SDK公共响应头实例或其子类实例;如果抛出异常,则说明操作失败,此时应从SDK自定义异常实例中获取错误信息。 以下代码展示了使用OBS客户端的通用方式: // 您的工程中可以只保留一个全局的ObsClient实例 // ObsClient是线程安全的,可在并发场景下使用 ObsClient obsClient = null; try { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变 量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 obsClient = new ObsClient(ak, sk, endPoint); // 调用接口进行操作,例如上传对象,其中localfile为待上传的本地文件路径,需要指定到具体的文件名 HeaderResponse response = obsClient.putObject("bucketname", "objectname", new File("localfile")); Log.i("PutObject", response); } catch (ObsException e) { Log.e("PutObject", "Response Code: " + e.getResponseCode()); Log.e("PutObject", "Error Message: " + e.getErrorMessage()); Log.e("PutObject", "Error Code: " + e.getErrorCode()); Log.e("PutObject", "Request ID: " + e.getErrorRequestId()); Log.e("PutObject", "Host ID: " + e.getErrorHostId()); }finally{ // 关闭ObsClient实例,如果是全局ObsClient实例,可以不在每个方法调用完成后关闭 // ObsClient在调用ObsClient.close方法关闭后不能再次使用 if(obsClient != null){ try { obsClient.close(); } catch (IOException e) { } } } 父主题: 快速入门
  • 列举对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 当完成一系列上传对象操作后,可能需要查看桶中包含哪些对象。以下代码展示如何列举指定桶中的对象: ObjectListing objectListing = obsClient.listObjects("bucketname"); for(ObsObject obsObject : objectListing.getObjects()){ Log.i("ListObjects", " - " + obsObject.getObjectKey() + " " + "(size = " + obsObject.getMetadata().getContentLength() + ")"); } 调用ObsClient.listObjects返回ObjectListing实例,该实例包含此次listObject请求的返回结果,可通过ObjetListing.getObjects获取所有对象(Object)的描述信息。 上面的代码默认列举1000个对象(Object)。 更丰富的列举功能,请参见列举对象。 父主题: 快速入门
  • 下载对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 以下代码展示如何获取对象的内容: ObsObject obsObject = obsClient.getObject("bucketname", "objectname"); InputStream content = obsObject.getObjectContent(); if (content != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(content)); while (true) { String line = reader.readLine(); if (line == null) break; Log.i("GetObject", "\n" + line); } reader.close(); } 调用ObsClient.getObject返回一个ObsObject实例,该实例包含对象内容及其属性。 调用ObsObject.getObjectContent获取对象输入流,可读取此输入流获取其内容,用完之后请关闭这个流。 更多下载对象的信息,请参见下载对象。 父主题: 快速入门
  • 上传对象 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 以下代码展示如何上传对象至OBS: obsClient.putObject("bucketname", "objectname", new ByteArrayInputStream("Hello OBS".getBytes())); 更多上传对象的信息,请参见上传对象。 父主题: 快速入门
  • 创建桶 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 桶是OBS全局命名空间,相当于数据的容器、文件系统的根目录,可以存储若干对象。以下代码展示如何新建一个桶: obsClient.createBucket("bucketname"); 桶的名字是全局唯一的,所以您需要确保不与已有的桶名称重复。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用类IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 更多创建桶的信息,请参见创建桶。 创建桶时,如果使用的终端节点归属于默认区域华北-北京一(cn-north-1),则可以不指定区域;如果使用的终端节点归属于其他区域,则必须指定区域,且指定的区域必须与终端节点归属的区域一致。当前有效的区 域名 称可从这里查询。 您可以使用带参数创建方式,在创建桶时,指定桶的区域位置。 父主题: 快速入门
  • 初始化OBS客户端 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient实例: // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 使用访问OBS // 关闭obsClient obsClient.close(); 更多关于OBS客户端初始化的操作请参见“初始化”章节。 日志配置详见配置SDK日志 父主题: 快速入门
  • 获取服务地址 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以从这里查看OBS当前开通的服务地址和区域信息。 SDK支持带协议名和不带协议名两种方式传入服务地址,例如获取到的服务地址为“your-endpoint”,则初始化OBS客户端时传入的服务地址可以为“http://your-endpoint”、“https://your-endpoint”和“your-endpoint”三种形式。 父主题: 快速入门
  • 使用前需知 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 请确认您已经熟悉OBS的基本概念,如桶(Bucket)、对象(Object)、访问密钥(AK和SK)等。 您可以先参考OBS客户端通用示例,了解OBS Android SDK接口调用的通用方式。 使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效;如果抛出异常,则说明操作失败,此时应可SDK自定义异常实例中获取错误信息。 使用OBS客户端进行接口调用成功后,均会返回包含响应头信息的SDK公共响应头实例(或其子类实例)。 当前各区域特性开放不一致,部分特性只在部分区域开放,使用过程中如果接口HTTP状态码为405,请确认该区域是否支持该功能特性。 父主题: 快速入门
  • 通过OBS Console配置桶的CORS 登录OBS Console后在桶列表中,单击待操作的桶,进入“概览”页面;如下图所示 在“基础配置”下,单击“CORS规则”卡片,进入“CORS规则”界面。 在“CORS规则”界面,单击“创建”,系统弹出“创建CORS规则”对话框,在该对话框中按照上表的参数进行配置,如下图所示: 单击“确定”,并在“CORS规则”界面查看已配置好的规则。 桶的CORS配置会在两分钟内生效,生效后才能使用OBS BrowserJS SDK访问桶。
  • 配置SDK日志 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以通过ObsClient.initLog开启日志功能并进行配置。示例代码如下: obsClient.initLog({ level:'warn', // 配置日志级别 }); SDK打印的日志均会显示在浏览器提供的 开发者工具 的控制台上。 日志功能默认是关闭的,需要主动开启。 您可以从 日志分析 章节获取更多关于SDK日志的信息。 父主题: 初始化
  • 配置桶允许跨域请求 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 要使用OBS BrowserJS SDK访问OBS服务的桶,必须配置该桶允许跨域请求(桶的CORS),推荐为桶的CORS配置的规则如下: 配置项 配置值 说明 AllowedOrigin * 允许任意请求来源。 说明: 也可以配置具体的域名或IP。 AllowedMethod PUT、GET、POST、DELETE、HEAD 允许所有的HTTP方法。 AllowedHeader * 允许请求中携带任意头域。 ExposeHeader ETag x-obs-request-id x-obs-api Content-Type Content-Length Cache-Control Content-Disposition Content-Encoding Content-Language Expires x-obs-id-2 x-reserved-indicator x-obs-version-id x-obs-copy-source-version-id x-obs-storage-class x-obs-delete-marker x-obs-expiration x-obs-website-redirect-location x-obs-restore x-obs-version x-obs-object-type x-obs-next-append-position 允许响应中返回指定的附加头域。 须知: 附加头域:指定浏览器可以暴露给客户端的响应消息头。 比如在浏览器环境中,需要获取ETag值,由于ETag不属于标准响应头,就需要添加到扩展头域。 您可以从这里参考各客户端工具配置CORS的详细步骤。 父主题: 快速入门
  • 如何解决断点续传接口报400 InvalidPart的错误? 可能存在的原因有: 合并段时请求段列表中包含了不存在的段; 合并段时请求段列表中包含的段的Etag错误。 可按照以下步骤排查原因: 打开浏览器的开发者工具。 检查合并段接口的请求体Body是否符合API接口规范。 如果发现请求体Body中的ETag值都是undefined,则说明ETag字段未配置成CORS的扩展头域,请参考配置桶的CORS章节进行配置,符合原因2的场景。 如果合并段请求体Body符合API接口规范,请继续排查合并段请求体Body体内容是否合理,以及Etag值的一致性。 排查请求段列表中是否包含了不存在的段信息,例如:对象A分为a、b、c三个段上传,但是段列表中,多出了一个不存在的段d。此时您需要删除多余段的相关信息,此场景符合原因1。 排查过程中段ETag值是否和服务端返回的ETag值一致,如果不一致,请修改请求体中携带的Etag值为正确值,此场景符合原因2。 父主题: FAQ
  • 公网环境下如何提高上传大文件速度? 在公网环境下对于超过100MB的大文件建议通过分段上传方式上传。分段上传是将单个对象拆分为一系列段分别上传。每个段都是对象数据的连续部分。您可以按照任意顺序上传段。如果其中某个段传输失败,可以重新传输该段且不会影响其他段。通过多线程并发上传同一对象的多个段,可大大提高传输效率。 具体代码样例可参见分段上传。您也可以使用SDK提供的断点续传上传接口进行大文件上传。 父主题: FAQ
  • 如何获取对象URL? 按https://桶名.域名/文件夹目录层级/对象名的方式进行拼接。 如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 各区域对应的域名可以从这里的终端节点查看。 例如需访问区域为“华北-北京四”的桶名为“testbucket”中“test”文件夹下对象名为“test.txt”的对象,则该对象的URL为https://testbucket.obs.cn-north-4.myhuaweicloud.com/test/test.txt。 父主题: FAQ
  • 如何获取桶的静态网站访问地址? 桶配置成静态网站托管模式后,可通过以下方式拼接桶的静态网站访问地址: https://桶名.静态网站托管域名 各区域对应的静态网站托管域名可以从这里查看。 例如区域为“华北-北京四”的桶名为“testbucket”的桶配置成静态网站托管模式后,该桶的静态网站访问地址为https://testbucket.obs-website.cn-north-4.myhuaweicloud.com。 父主题: FAQ
  • 日志配置 OBS BrowserJS SDK提供了日志功能,您可以通过ObsClient.initLog开启日志功能并进行配置。示例代码如下: // 创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, // 这里以华北-北京四为例,其他地区请按实际情况填写 server: 'https://obs.cn-north-4.myhuaweicloud.com' }); obsClient.initLog({ level:'warn', // 配置日志级别 }); SDK打印的日志均显示在浏览器提供的开发者工具的Console中。 日志功能默认是关闭的,需要主动开启。
  • 日志级别 当系统出现问题需要定位且当前的日志无法满足要求时,可以通过修改日志的级别来获取更多的信息。其中debug日志信息最丰富,error日志信息最少。 具体说明如下: debug:调试级别,如果设置为这个级别,将打印SDK记录的所有日志。 info:信息级别,如果设置为这个级别,除了打印warn级别的信息外,还将打印HTTP/HTTPS请求的耗时时间等信息。 warn:告警级别,如果设置为这个级别,除了打印error级别的信息外,还将打印一些关键事件的信息。 error:错误级别,如果设置为这个级别,仅打印发生异常时的错误信息。
  • 日志内容格式 SDK日志格式为:日志时间|日志级别|调用接口|日志内容。示例如下: 2018/2/11 下午9:22:45|info|ListObjects|enter ListObjects... 2018/2/11 下午9:22:45|info|ListObjects|prepare request parameters ok,then Send request to service start 2018/2/11 下午9:22:45|info|ListObjects|http cost 19 ms 2018/2/11 下午9:22:45|info|ListObjects|get response start, statusCode:200
  • OBS服务端错误码 在向OBS服务端发出请求后,如果遇到错误,会在响应中包含响应的错误码描述错误信息。详细的错误码及其对应的描述和HTTP状态码见下表: HTTP状态码 错误码 错误信息 处理措施 301 Moved Permanently PermanentRedirect 尝试访问的桶必须使用指定的地址,请将以后的请求发送到这个地址。 按照返回的重定向地址发送请求。 301 Moved Permanently WebsiteRedirect Website请求缺少bucketName。 携带桶名后重试。 307 Moved Temporarily TemporaryRedirect 临时重定向,当DNS更新时,请求将被重定向到桶。 会自动重定向,也可以将请求发送到重定向地址。 400 Bad Request BadDigest 客户端指定的对象内容的MD5值与系统接收到的内容MD5值不一致。 检查头域中携带的MD5与消息体计算出来的MD5是否一致。 400 Bad Request BadDomainName 域名不合法。 使用合法的域名。 400 Bad Request BadRequest 请求参数不合法。 根据返回的错误消息体提示进行修改。 400 Bad Request CustomDomainAreadyExist 配置了已存在的域。 已经配置过了,不需要再配置。 400 Bad Request CustomDomainNotExist 删除不存在的域。 未配置或已经删除,无需删除。 400 Bad Request EntityTooLarge 用户POST上传的对象大小超过了条件允许的最大大小。 修改POST上传的policy中的条件或者减少对象大小。 400 Bad Request EntityTooSmall 用户POST上传的对象大小小于条件允许的最小大小。 修改POST上传的policy中的条件或者增加对象大小。 400 Bad Request IllegalLocationConstraintException 用户未带Location在非默认Region创桶。 请求发往默认Region创桶或带非默认Region的Location创桶。 400 Bad Request IncompleteBody 由于网络原因或其他问题导致请求体未接受完整。 重新上传对象。 400 Bad Request IncorrectNumberOfFilesInPost Request 每个POST请求都需要带一个上传的文件。 带上一个上传文件。 400 Bad Request InvalidArgument 无效的参数。 根据返回的错误消息体提示进行修改。 400 Bad Request InvalidBucket 请求访问的桶已不存在。 更换桶名。 400 Bad Request InvalidBucketName 请求中指定的桶名无效,超长或带不允许的特殊字符。 更换桶名。 400 Bad Request InvalidEncryptionAlgorithmError 错误的加密算法。下载SSE-C加密的对象,携带的加密头域错误,导致不能解密。 携带正确的加密头域下载对象。 400 Bad Request InvalidLocationConstraint 创建桶时,指定的Location不合法或不存在。 指定正确的Location创桶。 400 Bad Request InvalidPart 一个或多个指定的段无法找到。这些段可能没有上传,或者指定的entity tag与段的entity tag不一致。 按照正确的段和entity tag合并段。 400 Bad Request InvalidPartOrder 段列表的顺序不是升序,段列表必须按段号升序排列。 按段号升序排列后重新合并。 400 Bad Request InvalidPolicyDocument 表单中的内容与策略文档中指定的条件不一致。 根据返回的错误消息体提示修改构造表单的policy重试。 400 Bad Request InvalidRedirectLocation 无效的重定向地址。 指定正确的地址。 400 Bad Request InvalidRequest 无效请求。 根据返回的错误消息体提示进行修改。 400 Bad Request InvalidRequestBody 请求体无效,需要消息体的请求没有上传消息体。 按照正确的格式上传消息体。 400 Bad Request InvalidTargetBucketForLogging delivery group对目标桶无ACL权限。 对目标桶配置ACL权限后重试。 400 Bad Request KeyTooLongError 提供的Key过长。 使用较短的Key。 400 Bad Request KMS.DisabledException SSE-KMS加密方式下,主密钥被禁用。 更换密钥后重试,或联系技术支持。 400 Bad Request KMS.NotFoundException SSE-KMS加密方式下,主密钥不存在。 携带正确的主密钥重试。 400 Bad Request MalformedACLError 提供的XML格式错误,或者不符合我们要求的格式。 使用正确的XML格式重试。 400 Bad Request MalformedError 请求中携带的XML格式不正确。 使用正确的XML格式重试。 400 Bad Request MalformedLoggingStatus Logging的XML格式不正确。 使用正确的XML格式重试。 400 Bad Request MalformedPolicy Bucket policy检查不通过。 根据返回的错误消息体提示结合桶policy的要求进行修改。 400 Bad Request MalformedQuotaError Quota的XML格式不正确。 使用正确的XML格式重试。 400 Bad Request MalformedXML 当用户发送了一个配置项的错误格式的XML会出现这样的错误。 使用正确的XML格式重试。 400 Bad Request MaxMessageLengthExceeded 拷贝对象,带请求消息体。 拷贝对象不带消息体重试。 400 Bad Request MetadataTooLarge 元数据消息头超过了允许的最大元数据大小。 减少元数据消息头。 400 Bad Request MissingRegion 请求中缺少Region信息,且系统无默认Region。 请求中携带Region信息。 400 Bad Request MissingRequestBodyError 当用户发送一个空的XML文档作为请求时会发生。 提供正确的XML文档。 400 Bad Request MissingRequiredHeader 请求中缺少必要的头域。 提供必要的头域。 400 Bad Request MissingSecurityHeader 请求缺少一个必须的头。 提供必要的头域。 400 Bad Request TooManyBuckets 用户拥有的桶的数量达到了系统的上限,并且请求试图创建一个新桶。 删除部分桶后重试。 400 Bad Request TooManyCustomDomains 配置了过多的用户域 删除部分用户域后重试。 400 Bad Request TooManyWrongSignature 因高频错误请求被拒绝服务。 更换正确的Access Key后重试。 400 Bad Request UnexpectedContent 该请求需要消息体而客户端没带,或该请求不需要消息体而客户端带了。 根据说明重试。 400 Bad Request UserKeyMustBeSpecified 该操作只有特殊用户可使用。 请联系技术支持。 403 Forbidden AccessDenied 拒绝访问,请求没有携带日期头域或者头域格式错误。 请求携带正确的日期头域。 403 Forbidden AccessForbidden 权限不足,桶未配置CORS或者CORS规则不匹配。 修改桶的CORS配置,或者根据桶的CORS配置发送匹配的OPTIONS请求。 403 Forbidden AllAccessDisabled 用户无权限执行某操作。桶名为禁用关键字。 更换桶名。 403 Forbidden DeregisterUserId 用户已经注销。 充值或重新开户。 403 Forbidden InArrearOrInsufficientBalance 用户欠费或余额不足而没有权限进行某种操作。 充值。 403 Forbidden InsufficientStorageSpace 存储空间不足。 超过配额限制,增加配额或删除部分对象。 403 Forbidden InvalidAccessKeyId 系统记录中不存在客户提供的Access Key Id。 携带正确的Access Key Id。 403 Forbidden NotSignedUp 你的账户还没有在系统中注册,必须先在系统中注册了才能使用该账户。 先注册OBS服务。 403 Forbidden RequestTimeTooSkewed 请求的时间与服务器的时间相差太大。 检查客户端时间是否与当前时间相差太大。 403 Forbidden SignatureDoesNotMatch 请求中带的签名与系统计算得到的签名不一致。 检查你的Secret Access Key和签名计算方法。 403 Forbidden Unauthorized 用户未实名认证。 请实名认证后重试。 404 Not Found NoSuchBucket 指定的桶不存在。 先创桶再操作。 404 Not Found NoSuchBucketPolicy 桶policy不存在。 先配置桶policy。 404 Not Found NoSuchCORSConfiguration CORS配置不存在。 先配置CORS。 404 Not Found NoSuchCustomDomain 请求的用户域不存在。 先设置用户域。 404 Not Found NoSuchKey 指定的Key不存在。 先上传对象。 404 Not Found NoSuchLifecycleConfiguration 请求的LifeCycle不存在。 先配置LifeCycle。 404 Not Found NoSuchUpload 指定的多段上传不存在。Upload ID不存在,或者多段上传已经终止或完成。 使用存在的段或重新初始化段。 404 Not Found NoSuchVersion 请求中指定的version ID与现存的所有版本都不匹配。 使用正确的version ID。 404 Not Found NoSuchWebsiteConfiguration 请求的Website不存在。 先配置Website。 405 Method Not Allowed MethodNotAllowed 指定的方法不允许操作在请求的资源上。 对应返回的Message为:Specified method is not supported. 方法不允许。 408 Request Timeout RequestTimeout 用户与Server之间的socket连接在超时时间内没有进行读写操作。 检查网络后重试,或联系技术支持。 409 Conflict BucketAlreadyExists 请求的桶名已经存在。桶的命名空间是系统中所有用户共用的,选择一个不同的桶名再重试一次。 更换桶名。 409 Conflict BucketAlreadyOwnedByYou 发起该请求的用户已经创建过了这个名字的桶,并拥有这个桶。 不需要再创桶了。 409 Conflict BucketNotEmpty 用户尝试删除的桶不为空。 先删除桶中对象,然后再删桶。 409 Conflict InvalidBucketState 无效的桶状态,配置跨Region复制后不允许关闭桶多版本。 不关闭桶的多版本或取消跨Region复制。 409 Conflict OperationAborted 另外一个冲突的操作当前正作用在这个资源上,请重试。 等待一段时间后重试。 409 Conflict ServiceNotSupported 请求的方法服务端不支持。 服务端不支持,请联系技术支持。 411 Length Required MissingContentLength 必须要提供HTTP消息头中的Content-Length字段。 提供Content-Length消息头。 412 Precondition Failed PreconditionFailed 用户指定的先决条件中至少有一项没有包含。 根据返回消息体中的Condition提示进行修改。 416 Client Requested Range Not Satisfiable InvalidRange 请求的range不可获得。 携带正确的range重试。 500 Internal Server Error InternalError 系统遇到内部错误,请重试。 请联系技术支持。 501 Not Implemented ServiceNotImplemented 请求的方法服务端没有实现。 当前不支持,请联系技术支持。 503 Service Unavailable ServiceUnavailable 服务器过载或者内部错误异常。 等待一段时间后重试,或联系技术支持。 503 Service Unavailable SlowDown 请降低请求频率。 请降低请求频率。 父主题: 异常处理
  • HTTP状态码 OBS服务端遵照HTTP规范,在接口调用完成均会返回标准的HTTP状态码,HTTP状态码分类以及OBS中常见的HTTP状态码如下: HTTP状态码分类: 分类 分类描述 1XX 信息,服务器收到请求,需要请求者继续执行操作,一般对客户调用函数不可见。 2XX 成功,操作被成功接收并处理。 3XX 重定向,需要进一步的操作以完成请求。 4XX 客户端错误,请求包含语法错误或无法完成请求。 5XX 服务器错误,服务器在处理请求的过程中发生了错误 OBS中常见的HTTP状态码及其含义: HTTP状态码 描述 常见原因 400 Bad Request 请求参数错误 请求参数不合法; 客户端携带MD5请求后一致性校验失败; 无效的参数(使用SDK时传递了不合法的参数); 无效的桶名(使用了不合法的桶名); 403 Forbidden 拒绝访问 请求的签名不匹配(一般是AK/SK错误); 权限不足(账号对请求的资源无权限); 账号欠费; 桶的空间不足(出现在对桶设置了配额的场景); 无效的AK; 客户端时间和服务端时间相差过大(客户端所在机器的时间与NTP服务不同步); 404 Not Found 请求的资源不存在 桶不存在; 对象不存在; 桶的策略配置不存在(桶CORS配置不存在、桶Policy配置不存在等); 分段上传任务不存在; 405 Method Not Allowed 请求的方法不支持 请求的方法/特性未在该桶所在的区域上线 408 Request Timeout 请求超时 服务端与客户端Socket连接超时 409 Conflict 请求冲突 在不同区域重复创建桶名桶; 尝试删除非空桶; 500 Internal Server Error 服务端内部错误 服务端内部错误 503 Service Unavaliable 服务不可用 服务端暂时不可访问 父主题: 异常处理
  • 加密说明 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS BrowserJS SDK支持服务端加密的接口见下表: OBS BrowserJS SDK接口方法 描述 支持加密类型 ObsClient.putObject 上传对象时设置加密算法、密钥,对对象启用服务端加密。 SSE-KMS SSE-C ObsClient.getObject 下载对象时设置解密算法、密钥,用于解密对象。 SSE-C ObsClient.copyObject 复制对象时设置源对象的解密算法、密钥,用于解密源对象。 复制对象时设置目标对象的加密算法、密钥,对目标对象启用加密算法。 SSE-KMS SSE-C ObsClient.getObjectMetadata 获取对象元数据时设置解密算法、密钥,用于解密对象。 SSE-C ObsClient.initiateMultipartUpload 初始化分段上传任务时设置加密算法、密钥,对分段上传任务最终生成的对象启用服务端加密。 SSE-KMS SSE-C ObsClient.uploadPart 上传段时设置加密算法、密钥,对分段数据启用服务端加密。 SSE-C ObsClient.copyPart 复制段时设置源对象的解密算法、密钥,用于解密源对象。 复制段时设置目标段的加密算法、密钥,对目标段启用加密算法。 SSE-C OBS BrowserJS SDK两种加密方式支持的请求参数: 加密类型 OBS BrowserJS SDK对应请求参数 说明 SSE-KMS SseKms 表示服务端加密是SSE-KMS方式,目前仅支持:kms。 SseKmsKey 表示SSE-KMS方式下的主密钥,可为空。 SSE-C SseC 表示服务端加密是SSE-C方式,目前仅支持:AES256。 SseCKey 表示SSE-C方式下的密钥,由AES256算法得到。上传对象时作为加密密钥;下载对象时作为解密密钥。注意:不需要base64编码处理。 CopySourceSseC 适用于ObsClient.copyObject和ObsClient.copyPart,表示以SSE-C方式解密源对象,目前仅支持:AES256。 CopySourceSseCKey 适用于ObsClient.copyObject和ObsClient.copyPart,表示以SSE-C方式解密源对象时使用的密钥,由AES256算法得到。 父主题: 服务端加密
  • 静态网站托管简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可以将静态网站文件上传至OBS的桶中作为对象,并对这些对象赋予公共读权限,然后将该桶配置成静态网站托管模式,以实现在OBS上托管静态网站的目的。第三方用户在访问您网站的时候,实际上是在访问OBS的桶中的对象。在使用静态网站托管功能时,OBS还支持配置请求重定向,通过重定向配置您可以将特定的请求或所有请求实施重定向。 更多关于静态网站托管的内容请参考静态网站托管。 父主题: 静态网站托管
  • 生命周期管理简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS允许您对桶设置生命周期规则,实现自动转换对象的存储类型、自动淘汰过期的对象,以有效利用存储特性,优化存储空间。针对不同前缀的对象,您可以同时设置多条规则。一条规则包含: 规则ID,用于标识一条规则,不能重复。 受影响的对象前缀,此规则只作用于符合前缀的对象。 最新版本对象的转换策略,指定方式为: 指定满足前缀的对象创建后第几天时转换为指定的存储类型。 直接指定满足前缀的对象转换为指定的存储类型的日期。 最新版本对象过期时间,指定方式为: 指定满足前缀的对象创建后第几天时过期。 直接指定满足前缀的对象过期日期。 历史版本对象转换策略,指定方式为: 指定满足前缀的对象成为历史版本后第几天时转换为指定的存储类型。 历史版本对象过期时间,指定方式为: 指定满足前缀的对象成为历史版本后第几天时过期。 是否生效标识。 更多关于生命周期的内容请参考生命周期管理。 对象过期后会被OBS服务端自动删除。 对象转换策略中的时间必须早于对象过期时间;历史版本对象转换策略中的时间也必须早于历史版本对象的过期时间。 桶的多版本状态必须处于Enabled或者Suspended,历史版本对象转换策略和历史版本对象过期时间配置才能生效。 父主题: 生命周期管理
  • 限定条件复制 复制对象时,可以指定一个或多个限定条件,满足限定条件时则进行复制,否则返回异常码,复制对象失败。 您可以使用的限定条件如下: 参数 作用 格式 CopySourceIfModifiedSince 如果源对象在指定的时间后有修改,则进行复制,否则抛出异常。 符合http://www.ietf.org/rfc/rfc2616.txt规定格式的HTTP时间字符串。 CopySourceIfUnmodifiedSince 如果源对象在指定的时间后没有修改,则进行复制,否则抛出异常。 符合http://www.ietf.org/rfc/rfc2616.txt规定格式的HTTP时间字符串。 CopySourceIfMatch 如果源对象的ETag值与该参数值相同,则进行复制,否则返回异常码。 字符串。 CopySourceIfNoneMatch 如果源对象的ETag值与该参数值不相同,则进行复制,否则返回异常码。 字符串。
  • 对象上传简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 在OBS中,用户操作的基本数据单元是对象。OBS BrowserJS SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 文本上传 文件上传 分段上传 追加上传 基于表单上传 SDK支持上传0KB~5GB的对象。文件上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象
  • 无法获取上传后的ETag值 使用ObsClient.putObject和ObsClient.uploadPart上传文件成功后返回结果中无ETag值,此类错误一般有两种原因: 桶的CORS配置中ExposeHeader不包含ETag头域,解决方法:按照文档配置桶的CORS为桶配置完整的CORS配置; 桶的CORS配置中ExposeHeader包含ETag头域,但浏览器的返回结果屏蔽了ETag头域(一般发生在低版本的浏览器),解决方法:升级到高版本且完全支持HTML5的浏览器。
  • 跨域请求被拦截 Access to XMLHttpRequest at 'xxx' from origin 'xxx' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • 请求成功但返回结果缺少某些字段 此类错误一般有两种原因: 在桶的CORS配置中ExposeHeader配置不完整,例如未配置ETag(导致上传对象成功后无法获取ETag值)、未配置x-obs-request-id(导致请求完成后无法获取OBS服务端请求ID)等,解决方法:请参考配置桶的CORS章节重新配置桶的CORS; 使用了旧版本的SDK,解决方法:升级到最新版本的SDK,可以从这里下载最新版本。
  • 配置OBS客户端 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 您可通过初始化参数对ObsClient进行配置,可以配置的参数见下表: 参数 描述 建议值 access_key_id 访问密钥中的AK。 N/A secret_access_key 访问密钥中的SK。 N/A server 连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。(出于安全性考虑,建议使用https协议) N/A timeout HTTP/HTTPS请求的总超时时间(单位:秒)。默认为300秒。 [10,300] is_cname 是否通过自定义域名访问OBS服务。默认为false。 N/A useRawXhr 是否使用原生XHR发送Ajax请求。默认为false。 N/A 建议值为N/A的表示需要根据实际情况进行设置。 如网络状况不佳或者上传文件较大,建议增大timeout的值。 父主题: 初始化
  • 直接创建 永久访问密钥(AK/SK)创建OBS客户端代码如下: // 未引入AMD,直接通过构造函数创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, // 这里以华北-北京四为例,其他地区请按实际情况填写 server: 'https://obs.cn-north-4.myhuaweicloud.com' }); // 使用访问OBS
共100000条