云服务器内容精选
-
初始化概述(Java SDK) 完成SDK安装之后,您还需要进行初始化工作,初始化工作主要包括两方面,一方面客户端的创建和配置,另一方面是SDK日志配置。 表1 初始化概述 初始化任务 子任务 是否必选 说明 创建并配置客户端 创建客户端 是 OBS客户端是使用Java SDK访问OBS服务的必备媒介,它为调用者提供一系列与OBS服务进行交互的接口,使用OBS Java SDK向OBS发起请求,您需要创建并初始化一个客户端,即一个ObsClient实例。 配置访问密钥 是 基于安全需要,您需要为客户端配置访问凭证以便服务端校验请求的合法性。 配置终端节点及其他选项 终端节点必选,其余配置项可选 为了快速创建和检索到您的资源,需要配置客户端的终端节点,即告知服务端资源所在的区域。 除了访问密钥和终端节点外,您可以根据自身使用场景,为客户端配置其他选项。 配置SDK日志 配置日志等级 否 OBS Java SDK基于Apache Log4j2开源库提供了日志功能,Log4j2框架按照优先级将日志进行了分级处理,您可以配置存储某个级别以上的日志,自行决定存储日志的范围。 OBS Java SDK默认将WARN及WARN以上级别的日志保存到本地。 配置日志存放路径 否 配置日志在本地的存储路径。 父主题: 初始化(Java SDK)
-
代码示例 本示例用于指定位置修改examplebucket并行文件系统中objectname对象的内容。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.ModifyObjectRequest;import com.obs.services.model.ModifyObjectResult;import java.io.ByteArrayInputStream;public class ModifyObject001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { // 第一次上传 ModifyObjectRequest request = new ModifyObjectRequest(); request.setBucketName("examplebucket"); request.setObjectKey("objectname"); request.setPosition(0); request.setInput(new ByteArrayInputStream("HELLO OBS FIRST".getBytes())); ModifyObjectResult result = obsClient.modifyObject(request); // 第二次修改写 request.setPosition(0); request.setInput(new ByteArrayInputStream("hello obs second".getBytes())); result = obsClient.modifyObject(request); System.out.println("modifyObject successfully"); System.out.println("HTTP Code: " + result.getStatusCode()); } catch (ObsException e) { System.out.println("modifyObject failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("modifyObject failed"); // 其他异常信息打印 e.printStackTrace(); } }}
-
请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request ModifyObjectRequest 必选 参数解释: 修改写对象请求参数,详见ModifyObjectRequest。 表2 ModifyObjectRequest 参数名称 参数类型 是否可选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 objectKey String 必选 参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 position long 必选 参数解释: 修改写操作的位置。 取值范围: 不小于0的长整型。单位:字节。 默认取值: 无 input InputStream 可选 参数解释: 待上传对象的数据流。 默认取值: 无 file File 可选 参数解释: 待上传的本地文件。 默认取值: 无 encodeHeaders boolean 可选 参数解释: 是否开启OBS对请求头域的自动编码。 由于HTTP编码规范限制,无法发送非ASCII码字符,SDK会在发送请求时对您头域中的中文汉字进行url编码,发送编码后数据。如您设置的值content-disposition为attachment; filename="中文.txt",则对象元数据中存储的信息为attachment; filename="%E4%B8%AD%E6%96%87.txt"。使用浏览器访问时浏览器将会自动解码。 取值范围: true:启用SDK编码。 false:不启用SDK编码。 默认取值: true
-
接口约束 您必须是并行文件系统拥有者或拥有修改写对象的权限,才能修改写对象。建议使用 IAM 或策略进行授权,如果使用IAM则需授予obs:bucket:PutObject权限,如果使用策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 目前接口仅在并行文件系统支持,普通对象并行文件系统不支持,如何创建并行文件系统请参考创建并行文件系统(Java SDK)。
-
请求参数说明 表1 ListInventoryConfigurationRequest 参数名称 参数类型 是否必选 描述 bucketName String 是 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
-
接口约束 您必须是桶拥有者或者拥有列举桶清单权限,才能列举桶清单。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetInventoryConfiguration权限,如果使用桶策略则需授予GetInventoryConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
-
SignatureDoesNotMatch签名不匹配 12 HTTP Code: 403Error Code: SignatureDoesNotMatch 此类错误一般有三种原因: 初始化ObsClient时传入的SK有误,解决方法:检查SK,确保正确; 旧版本OBS Java SDK的BUG,解决方法:升级SDK到最新版本; OBS Java SDK 2.1.x版本与其依赖库Apache HttpClient的兼容性问题,解决方法:使用固定版本的依赖库,httpcore-4.4.4和httpclient-4.5.3。
-
ObsException中无法获取错误码 此类错误一般有两种原因: 调用ObsClient.getBucketMetadata或ObsClient.getObjectMetadata报错,此种场景下由于后台使用的是HEAD请求,服务端不会返回错误码,解决方法:使用ObsException.getResponseCode获取HTTP状态码,根据状态码分析可能原因,如403一般代表无权限访问,404一般代表桶或对象不存在;如无法定位原因,可从ObsException中获取OBS服务端请求ID后联系OBS运维团队; 初始化ObsClient时传入的Endpoint通过DNS解析后的IP不是有效的OBS服务端,解决方法:检查Endpoint配置是否正确,如Endpoint确认无误,联系OBS运维团队。
-
读写超时 123456 HTTP Code: 408Error Code:RequestTimeOutCaused by: java.net.SocketTimeoutException: timeoutat okio.Okio$4.newTimeoutException(Okio.java:232)at okio.AsyncTimeout.exit(AsyncTimeout.java:285)at okio.AsyncTimeout$2.read(AsyncTimeout.java:241) 此类错误一般有两种原因: 客户端到OBS服务端的网络时延过大,解决方法:检查客户端到OBS服务端的网络健康状况; 客户端到OBS服务端的网络异常,导致无法访问,解决方法:检查客户端到OBS服务端的网络健康状况。
-
UnknownHostException 域名 无法解析异常 1234 Caused by: java.net.UnknownHostException: bucketname.unknowndomain.comat java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) 此类错误一般有两种原因: 初始化ObsClient时传入的Endpoint有误,解决方法:检查Endpoint,确保正确; DNS无法解析OBS服务域名,解决方法:联系OBS运维团队。
-
升级SDK后okhttp报错问题 123456 Exception in thread "main" java.lang.NoSuchMethodError: 'okhttp3.RequestBody okhttp3.RequestBody.create(java.lang.String, okhttp3.MediaType)'at com.obs.services.internal.RestConnectionService.createRequestBuilder(RestConnectionService.java:157)at com.obs.services.internal.RestConnectionService.setupConnection(RestConnectionService.java:148)at com.obs.services.internal.RestConnectionService.setupConnection(RestConnectionService.java:124)at com.obs.services.internal.RestStorageService.performRequest(RestStorageService.java:395)at com.obs.services.internal.RestStorageService.performRequest(RestStorageService.java:388)
-
报错SSL peer shut down incorrectly 1 2 3 4 5 6 7 8 91011121314151617181920212223 javax.net.ssl.SSLException: SSL peer shut down incorrectlyat sun.security.ssl.InputRecord.readV3Record(InputRecord.java:596)at sun.security.ssl.InputRecord.read(InputRecord.java:532)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:933)at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)at obs.shaded.okio.Okio$2.read(Okio.java:140)at obs.shaded.okio.AsyncTimeout$2.read(AsyncTimeout.java:237)at obs.shaded.okio.RealBufferedSource.read(RealBufferedSource.java:51)at obs.shaded.okhttp3.internal.http1.Http1ExchangeCodec$AbstractSource.read(Http1ExchangeCodec.java:389)at obs.shaded.okhttp3.internal.http1.Http1ExchangeCodec$FixedLengthSource.read(Http1ExchangeCodec.java:427)at obs.shaded.okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.java:286)at obs.shaded.okio.RealBufferedSource$1.read(RealBufferedSource.java:447)at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:238)at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117)at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)at java.io.InputStreamReader.read(InputStreamReader.java:184)at java.io.BufferedReader.fill(BufferedReader.java:161)at java.io.BufferedReader.readLine(BufferedReader.java:324)at java.io.BufferedReader.readLine(BufferedReader.java:389)
-
连接超时 1234 HTTP Code: 408Caused by: java.net.ConnectException: Connection timed out: connectat java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 此类错误一般有三种原因: 初始化ObsClient时传入的Endpoint有误,解决方法:检查Endpoint,确保正确; 客户端到OBS服务端的网络异常,导致无法访问,解决方法:检查客户端到OBS服务端的网络健康状况; DNS解析出的OBS服务域名无法访问,解决方法:联系OBS运维团队。
-
NullPointException空指针异常 123 Exception in thread "main" java.lang.NullPointerExceptionat com.obs.services.internal.RestStorageService.isCname(RestStorageService.java:1213)at com.obs.services.ObsClient.doActionWithResult(ObsClient.java:2805)
-
升级SDK后报错StackOverflowError问题 123456789 Caused by: java.lang.StackOverflowErrorat sun.misc.URLClassPath.getResource(URLClassPath.java:211) ~[?:1.8.0_91]at java.net.URLClassLoader$1.run(URLClassLoader.java:365) ~[?:1.8.0_91]at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[?:1.8.0_91]at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_91]at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[?:1.8.0_91]at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_91]at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_91]at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1806)
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格