-
1、连接超时出现此类异常原因一般是服务地址(Endpoint)错误或网络不通导致无法连接服务,此时请检查服务地址、网络状况和代理设置。2、错误处理在使用Java SDK时,当服务端或者SDK端出错时,SDK会返回相应的异常信息。这些异常信息中会包含具体的错误信息,例如错误码(Error Code)和错误消息(Error Message)。 "Error Code"是错误码,可以查看错误码定义,找到对应的错误描述,找出对应的错误类型。 "Error Message"是错误信息,可以快速的帮助定位问题,找出错误原因并解决。 如果您需要对SDK的错误进行处理,可以参考如下示例编写代码:/** 业务流程:* 1、首先需要导入点播sdk包VodSDK.jar* 2、设置点播服务配置项,包括点播服务节点地址、AK、SK和ProjectId等,用于连接点播服务和进行授权等。* 3、构造媒资发布请求参数,没有填必填字段* 4、发送媒资发布请求。* 5、返回处理信息。*/import com.google.gson.Gson;import com.huawei.vod.client.ClientConfig;import com.huawei.vod.client.VodClient;import com.huawei.vod.client.VodConfig;import com.huawei.vod.model.Asset.PublishAssetReq;import com.huawei.vod.model.Asset.PublishAssetRsp;//设置点播服务配置项构造方法VodConfig vodConfig = new VodConfig();//设置用户项目编号ProjectId,查看项目ID参考 "查看项目ID"章节vodConfig.setProjectId("projectId");//设置点播服务节点地址,如点播服务的Endpoint当前为“vod.cn-north-1.myhuaweicloud.com”vodConfig.setEndPoint("endPoint");//设置SK,SK的获取方法请参考"创建访问密钥" 章节vodConfig.setAk("ak");vodConfig.setSk("sk");//点播服务构造方法,在没有配置代理的情况下使用该构造方法VodClient vodClient = new VodClient(vodConfig);//设置媒资发布请求参数PublishAssetReq req = new PublishAssetReq();//媒资id是必填的,但在这里没有填写媒资id//String[] assets = {"asset1", " asset2"};//设置媒资发布的媒资IDreq.setAsset_id(req);//发送媒资发布请求PublishAssetRsp rsp = vodClient.publishAssets(req);//如果返回错误if(BaseResponse.FAIL == rsp.getStatus()){ // 这里可以添加您自己的错误处理逻辑 // 例如,打印具体的错误信息 System.out.println("ErrorCode ="+ rsp.getErrorCode()); System.out.println("ErrorMsg ="+ rsp.getErrorMsg());}//如果返回成功else{ //返回处理结果 System.out.println(new Gson().toJson(rsp));}
-
为公司有通知文件管理和归档的需求,所以购买了一个华为云OBS服务,使用自开发接口来进行通知文件的上传下载,由于通知文件有短时高并发访问的特点,决定使用nodejs来实现,毕竟node在通讯和IO上有他独特的优势。开发过程中遇到了一些小坑,但是在华为云服务技术人员的支持下,完成了核心的功能上传和下载,这里简单的分享下。华为文档在官网上都可以查询到,需要根据文档来进行开发的,部分文档说明不明确的地方可能会造成开发人员的困惑,我这里会对这些进行简单的说明。华为云OBS有标准的nodejs-SDK,可以进行下载使用,只是该SDK不是很适用于我们的项目,因为我们小文件居多,也有自己的业务组件,所以没有采用SDK的方式进行实现,而使用了更轻量级的head携带信息进行请求的方式来进行实现。查阅head方式调用api的文档。核心内容就是head的Authorization的签名生成,这里直接举例子进行签名的生成,下面将分别从实例上介绍上传和下载的功能实现。至于秘钥文件的获取和部分前台操作相信大部分运维人员会搞定,这里就不做详细说明了。 场景:桶下有一个文件需要下载,桶命:buk1,文件名:test.txt,下载到本地项目目录./buk1/test/ 路径下第一步,构造请求的URL,这里注意。需要把文件的key拼接在云服务桶的endpoint后。比如,从前台获取到的桶的endpoint是http://桶名.obs.cn-south-1.myhwclouds.com,你要下载文件的key是/test.txt,这个时候你的完整的请求url就是http://桶名.obs.cn-south-1.myhwclouds.com/test.txt;第二步,构造Authorization参数,这里的组成请参考官网文档,值得注意的是,不要随意颠倒拼接的顺序,要严格按照官网的顺序进行拼接,拼接的时候注意以下几点:1.标准时间,这里注意的是,使用的是格林威治的标准时间,不需要进行时区的转换,node重获取这个时间和时间字符串的方法如下var gmdate = new Date();var utcdate = gmdate.toUTCString();2.请求方法,下载的请求方法为GET,node中直接定义var httpMethod = ‘GET’ 即可;3.SK:SK全名SecretAccessKeyID,作为加密的秘钥,这个可以从前台获取4.AK:AK全名AccessKeyid,作为一个标识,放入Authorization头,后面会说明5.CanonicalizedHeaders 和 CanonicalizedResource,按照文档进行配置,下载这里有时候需要加入一个Content-Type字符串避免签名验证失败,例如txt类型的文件的Content-Type就是text/plain准备好以上的变量后就是开始计算Signature了,根据华为OBS文档,这里直接展示拼接的字符串在node中的代码var beforestr = ‘GET’+ "\n" + "\n" + "text/plain\n" + 时间(utcdate变量) + "\n" + "/桶名/test.txt";这个字符串注意几点,除了最后,每个字符串拼接需要拼接一个‘\n’,直接使用字符串即可,不用考虑转义。关于text/plain就是txt文件的Content-Type,有时候必须加入这个参数后才不会出现403签名错误,最后的字符串参照文档即可,即/桶名/key名,具体各种文件的Content-Type可以查阅附件(从官方标准SDK中剥出来的)ContentType.rar接下来就是对这个字符串进行加密,。加密的过程很标准,这里直接给出代码,如下 var signaturestr =crypto.createHmac("sha1",秘钥(SecretAccessKeyID)).update(utf8.encode(beforestr)).digest().toString("base64"); 到此获取完最复杂的签名后就是构造请求头部,这里比较简单,直接贴出代码做简单说明 var headarr = { "Date": utcdate, //这里的时候就是注意使用上方的签名中的时间字符串,避免在new一个新的,会造成时间不一致导致签名失败 "Host": "桶名.obs.cn-south-1.myhwclouds.com",//照抄,注意这里不要在尾部添加文件key "Authorization": "OBS AK(AccessKeyid):" + signaturestr, //注意空格和: "Content-Type": " text/plain " //这里尤其要注意和上方加密的字符串保持一致,意思就是字符串中有,这里必须有,否则将导致签名错误 }; 至此,需要准备的变量都完成了,准备进行API请求,我使用的是node的request模块,这里比较简单,直接贴出代码。注意保存路径必须存在,否则会出错,相关验证请自行根据应用场景添加var options = { url: http://桶名.obs.cn-south-1.myhwclouds.com/test.txt headers: headarr };httprequest(options).pipe(fs.createWriteStream(‘./buk1/test/test.txt’)).on("close", function (err) { if (err) { console.log(err); //错误操作 } //成功操作 });关于上传: 有了下载的经验,实现上传就简单的多了。直接贴出代码(代码片段,比如模块引入等,不全请注意自行补全). 场景:把代码目录下的test.txt上传到:桶名/test.txt 的key中 但是有个注意点需要特别注意,就是自定义CanonicalizedHeaders 和 CanonicalizedResource的时候,必须要按照文档的顺序,从上至下添加,不能违反文档的顺序,截图如下,并且要注意各个API允许的CanonicalizedHeaders 和 CanonicalizedResource是不一样的,要遵循文档结合应用场景进行设计。 var crypto = require('crypto');var utf8 = require('utf8');var fs = require('fs');var httprequest = require(‘request’)fs.readFile('./test.txt', function (err, data) { if (err) { console.log(err); } console.log('----------data---------------') console.log(data); console.log('-----------------------------'); var datalength = data.length; var url = 'http://桶名. obs.cn-south-1.myhwclouds.com/test.txt'; console.log('url---->' + url); var gmdate = new Date(); var utcdate = gmdate.toUTCString(); var httpMethod = "PUT"; //注意,上传使用的是PUT方式 var beforestr = httpMethod + "\n" + "\n" + "text/plain\n" + utcdate + "\n" + 'x-obs-acl:public-read\nx-obs-storage-class:STANDARD\n' + "/桶名/test.txt"; //注意x-obs-*的顺序 console.log('------------para-------------'); console.log(beforestr); console.log('-----------------------------'); var SecretAccessKeyID = "你的SK"; var signaturestr = crypto.createHmac("sha1", SecretAccessKeyID).update(utf8.encode(beforestr)).digest().toString("base64"); console.log('sing------------->' + signaturestr); var headarr = { "Date": utcdate, "User-Agent": "curl/7.15.5", "Host": "obs-e06d.obs.cn-south-1.myhwclouds.com", "x-obs-acl": "public-read", //注意x-obs-*的顺序和上方字符串一致 "x-obs-storage-class": "STANDARD", //注意x-obs-*的顺序和上方字符串一致 "Authorization": "OBS 你的AK:" + signaturestr, //注意空格和: "Content-Type": "text/plain", //和上方字符串保持一致 "Content-Length": datalength //长度不可省略 }; console.log('------------head-------------'); console.log(head); console.log('-----------------------------'); var options = { url:url, headers: headarr, body: data }; httprequest.put(options, function (error, response, body) { if (!error && response.statusCode == 200) { //可以使用response获取返回的header,里面有部分OBS返回参数 } else { //错误处理 }); }) 至此,node通过head签名方式实现文件上传和下载就实现了。这里为了展示过程,没有进行任何代码封装,比较直观,方便看到具体过程。如有遇到问题或者更好的建议,欢迎各位大神指出,共同进步!谢谢!
-
[问题求助] SDK客户端接口调用抛出statusCode 400, reasonPhrase Bad Request, response content-type null is not supportedtransport-vert.x-eventloop-thread-30] [org.apache.servicecomb.loadbalance.LoadbalanceHandler$4.lambda$null$0(LoadbalanceHandler.java:278)] service CONSUMER rest CSBProdOfferingService.OfferingQueryProduct.queryBatchProduct, call error, msg is InvocationException: code=490;msg=CommonExceptionData [message=method POST, path /product/product-offering/v2/products/detail/, statusCode 400, reasonPhrase Bad Request, response content-type null is not supported], server is rest://177.66.15.110:8443?sslEnabled=true&urlPrefix=/ 原因:这个错误是因为provider返回400错误码。provider在接口定义的时候,API没声明400错误码,客户端无法解析,打印了异常。 可以通过查询provider日志进一步查询详细原因。
-
[问题求助] SDK开发启动报错Can not find any instances from service center due to previous errors. service=default/CseMonito...Can not find any instances from service center due to previous errors. service=default/CseMonitoring/latest 这个错误是由于服务启动的时候,尝试连接监控服务上报服务运行数据(metrics),由于线下开发没有部署这个服务,所以会打印这个日志。 监控服务的地址是自动发现的,如果连接失败,会重试。 因此刚启动的时候,可能频繁打印日志,这个重试如果几次不成功,会降低频率,后面2分钟才会打印一次。
-
有php的么
-
[color=rgb(255,255,255)]编辑词条 【问题现象】 使用OBS Java SDK在Linux机器上使用“obs.myhwclouds.com”域名调用上传对象接口,报错"UnknowHostException"。 【分析过程】1.在运行环境上可正常ping通obs.myhwclouds.com,并且使用dig命令也能正常解析obs.myhwclouds.com,排除网络原因。 2.分析OBS Java SDK,所用的HttpClient框架底层是通过JDK标准库进行域名解析的,该标准库不会存在BUG,因此怀疑是运行环境的问题。 3.查询JDK标准库域名解析算法的相关资料,发现JDK标准库会读取运行环境上的/etc/resolv.conf文件,以获取DNS配置从而解析出IP,如果JVM进程对该文件没有读权限,可能导致"UnknowHostException"异常。 4.排查运行环境发现运行JVM进程的用户确实没有读/etc/resolv.conf文件的权限,修改权限后,问题解决。 【经验总结】报错的表象和根因看起来差得比较远,要深入问题本质才能分析出来。
-
请问有没有知道U-vMOS SDK集成Android的对应下载包的下载链接呢?或者这个SDK本身是收费的还是免费的呢?
-
PHP实现obs上传,是否需要obs的上传sdk
-
我用api调用aksk进行认证的话有python相关的sdk吗?
-
在产品主页、帮助文档中找了一圈,都没有sdk链接,请问藏到哪里去了? ......
-
对象存储服务软件开发工具包(OBS SDK,Object Storage Service Software Development Kit)是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用OBS SDK提供的接口函数即可实现使用OBS服务业务能力的目的。Java、Python、.NET、Android、iOS、C、Node.js、BrowserJS、PHP、Go十种语种的SDK的下载地址为:https://developer.huaweicloud.com/sdk?OBS
-
很多AI、EI产品没有提供Python SDK,很不方便。
-
使用gcc-sdk开发,本地测试通过。决赛阶段一直报 answer exit abnormal Missing output file. 错误。 使用原始版本的gcc-sdk,参考这篇贴子,修改了buff数组内存分配,https://forum.huaweicloud.com/thread-8487-1-1.html 调试后还是存在一些案例跑通,另一些案例报此错误。 可否请专家修复一些sdk中的这个问题?调试的心累。
上滑加载中
推荐直播
-
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中 -
GaussDB应用实战:手把手带你写SQL
2025/01/09 周四 16:00-18:00
Steven 华为云学堂技术讲师
本期直播将围绕数据库中常用的数据类型、数据库对象、系统函数及操作符等内容展开介绍,帮助初学者掌握SQL入门级的基础语法。同时在线手把手教你写好SQL。
去报名 -
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
2025/01/10 周五 15:30-17:30
MindStudio布道师
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
即将直播
热门标签