• 关于

    web api 获取参数

    的搜索结果

问题

快速入门SQL Server版-各版本的API差异

实例管理 [tr=rgb(51, 205, 229)][td=1,2]API API 描述高可用版基础版[tr=rgb(51, 205, 229)][td]2016 标准版、企业版2012 标准版、企业版 ...
李沃晟 2019-12-01 21:37:44 542 浏览量 回答数 0

回答

Hibernate 把实体bean的相关信息,抽象成一个元数据概念,具体的接口是org.hibernate.metadata.ClassMetadata,它提供了一系列的方法,比如获取Entity 名字,Class Type,Property等等,具体的大家看一下API就明白了这个接口通过Hibernate的顶级接口SessionFactory获取,比如,通过SessionFactory#getAllClassMetadata()方法就能获取到所有的实体Bean信息了。SpringMVC 也有类似的设计。首先是将请求的映射关系封装成了一个叫做 org.springframework.web.servlet.mvc.method.RequestMappingInfo 的对象,这个对象包含了一系列的映射匹配条件,待接受到请求后,通过此对象和请求进行比较,比如请求参数类型名字是否匹配,URL参数是否匹配等等。然后是将请求具体的处理方法封装成了一个叫做org.springframework.web.method.HandlerMethod的对象,也就是我们的 Controller 对象中处理请求的方法,这个对象同样也包含很多处理方法相关的信息。比如:`HandlerMethod#getBean() // 获取处理方法的Controller对象的实例HandlerMethod#getBeanType()// 获取 Controller 的类型HandlerMethod#getMethod() // 获取处理的方法反射 Method 对象HandlerMethod#getMethodParameters() // 获取处理方法的参数数组HandlerMethod#getReturnType() // 获取处理方法的返回值类型`上述2个元数据对象,会在SpringMVC启动的时候初始化好,缓存起来后作为后续请求分发的基础,并且包装到org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 对象中。通过RequestMappingHandlerMapping#getHandlerMethods() 即可以获取一个 URL映射描述(RequestMappingInfo)作为Key,具体请求处理的方法(HandlerMethod)的Map对象,每一次的请求,Spring也是通过迭代这个Map,获取到与请求匹配的HandlerMethod来进行处理的,通过这个方法就能获取到所有处理方法的信息。另外,如果你只是想简单的拿到所有的Controller对象,那么只要获取到指定的Annotation为Controller对象的类即可了。通过Spring上下文提供的ApplicationContext#getBeanNamesForAnnotation(Controller.class)方法,获取到一个数组包含了Spring容器中,所有标识了Controller注解的Bean的名字。或者直接通过Application#getBeansWithAnnotation(Controller.class)方法,获取一个Map对象,key为BeanName,value为Bean的实例。
爵霸 2019-12-02 01:57:06 0 浏览量 回答数 0

问题

【精品问答】API 网关

API参考 API 网关的术语有哪些? https://developer.aliyun.com/ask/278237 API 网关的请求结构 https://developer.aliyun.com/ask/27824...
montos 2020-04-09 19:23:31 4 浏览量 回答数 1

回答

swagger-ui 和srping项目的整合还是非常简单的,不知道你们的项目是使用的什么架构。推荐可以去官网查看相关使用说明。 以下是我用springBoot整合Swagger的一个简单案例 1. 添加依赖: <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency> 2. 创建Swagger配置类:通过@Configuration注解,让Spring来加载该类配置。再通过@EnableSwagger2注解来启用Swagger2通过@Configuration注解,让Spring来加载该类配置。 Docket是api扫描的接口规则制定对象,代码中是全部扫描,并显示所有rest接口api的Docket方式,实际开发的时候请根据自己需求进行定制。 ApiInfo是对swagger首页的信息说明对象,也可以根据实际开发需求进行设置。 @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() // 扫描的注解所在的包路径 .apis(RequestHandlerSelectors.basePackage("com.jpa.example.demo")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() //设置首页标题 .title("api文档") //设置文档整体说明 .description("restful 风格接口") //服务条款网址 //.termsOfServiceUrl("") .version("1.0") //.contact(new Contact("hello", "url", "email")) .build(); } } @EnableSwagger2 指定springBoot初始化时候加载swagger @EnableSwagger2 //启动swagger注解d public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } 3.使用注解完成接口的说明 import com.jpa.example.demo.bean.User; import com.jpa.example.demo.service.IUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * Created By zhangJian on 2019/2/18 * @Api() * 用于类;表示标识这个类是swagger的资源 * tags–表示说明 * value–也是说明,可以使用tags替代 * 但是tags如果有多个值,会生成多个list * @description: */ @Api(value = "用户controller",tags = {"用户操作接口"}) @RestController public class UserController { /** * 常用注解: * - @Api()用于类; * 表示标识这个类是swagger的资源 * - @ApiOperation()用于方法; * 表示一个http请求的操作 * - @ApiParam()用于方法,参数,字段说明; * 表示对参数的添加元数据(说明或是否必填等) * - @ApiModel()用于类 * 表示对类进行说明,用于参数用实体类接收 * - @ApiModelProperty()用于方法,字段 * 表示对model属性的说明或者数据操作更改 * - @ApiIgnore()用于类,方法,方法参数 * 表示这个方法或者类被忽略 * - @ApiImplicitParam() 用于方法 * 表示单独的请求参数 * - @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam * */ @Autowired private IUserService userService; /** * value用于方法描述 * notes用于提示内容 * tags可以重新分组(视情况而用) * * @ApiParam() 用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等) * name–参数名 * value–参数说明 * required–是否必填 * @param username * @return */ @ApiOperation(value = "获取用户信息",tags = {"获取用户信息COPY"},notes = "实现注意事项") @GetMapping("/getUserInfo") @ApiImplicitParam(name="username",value="用户名",dataType="String", paramType = "query") public User getUserInfo(String username){ User user = userService.getUserInfo(username); return user; } @ApiOperation(value="更改用户信息",notes="传入用户对象信息") @PostMapping("/updateUser") public User updateUser(@RequestBody @ApiParam(name="用户对象",value="传入json格式",required=true)User user){ return userService.updateUser(user); } } 访问http://localhost:8080/swagger-ui.html效果如图: 点击接口连接可以查看接口的详细说明,入参示例,通过测试数据可以访问接口并返回数据格式,这里当然是针对返回json数据的。 具体参数说明以及示例可以百度
soulstart 2019-12-02 02:03:37 0 浏览量 回答数 0

回答

步骤 WEB平台 手机 第1步 生成二维码 第2步 (ajax监控后台) 扫码 第3步 (ajax监控后台) 确定(后台异步通知WEB平台) 第4步 AJAX发现状态改变,登陆成功 ajax监控后台的流程:生成二维码后 setTimeout(function(){ //AJAX请求,检测状态 },5000); 整体思路: 1.前端调用后台生成二维码的API,获取到二维码图片和所包含的信息(通常是一个唯一ID) 2.前端检测(通过轮询或者websock,自己选择)是否有手机扫码,通过调用后台接口API,参数为上面的唯一ID 3.手机扫描二维码登陆,手机端可以获取到二维码里的信息ID,带上当前登陆用户ID和二维码里的ID调用后台接口。后台存储这个二维码的数据,加上登录用户信息,当前台调用API时,给返回登录成功。 4.前端获取到登录成功,进行跳转 微信与支付宝的扫码登录是有一些区别的,微信目前是一个持续27s的长连接请求;而支付宝是持续循环的短连接请求。其实原理是一样的。 首先,前端调用二维码接口,获取图片二维码以及用户唯一表示uid,然后与服务器建立长连接请求,询问是否有用户扫码登录。 用户用APP扫码之后,会请求服务器接口,将用户信息与二维码的uid绑定,前端的长连接就可以请求到当前uid对应的用户,从而进行登录操作。
景凌凯 2020-02-07 13:19:04 0 浏览量 回答数 0

回答

其实你简单一点理解,所谓的开放平台API不过是php curl数据采集而已,区别在于你永远都要携带部分参数过去,或者说有先后顺序;然后对采集获取到的数据进行验证、处理。######其实我想问的就是 curl 看了一下大概理解点了,自学的不系统,有很多知识点不到位 谢了######php和mysql web开发 经典入门######能说一下具体的知识点吗 谢谢###### 你要用哪里的api api只用一般需要构建参数,然后发送到api地址 然后读返回数据,然后整理 ,然后入库或呈现! ######回复 @netwinder : 恩######回复 @本源 : 其实很简单的 会一个其他的也差不多了 尝试自己封装一个类 会对api应用的理解有显著帮助!######回复 @netwinder : 谢谢 我基础不扎实,没接触过curl相关函数,所以对开发平台的说明一头雾水,现在正在补充相关知识,对有SDK的,如微博,七牛什么的已经会简单操作了,像豆瓣什么的要自己写的还在研究中######回复 @本源 : 告诉我用的哪里的api 我些一段 给你解释######php是怎么将数据传给api又接收数据的,告诉我具体的知识点吧,因为是自学的,看得东西很散,没有系统学习,######所谓api,就是URL地址而已,在URL中传入文档规定的字段,就可以返回相应的数据。去看官方文档,下载sdk或者自己写方法来把参数拼成URI字段。######今天又看了点东西,暂时理解为,我们的服务器端相当于开放平台的客户端,然后再照我以前理解的一想,好像明白点了###### 你需要的就是你所想要用到的官方api文档。######恩 我基础知识不扎实
kun坤 2020-06-07 20:55:45 0 浏览量 回答数 0

问题

如何从钉钉获取临时授权码code?

我现在用java写了一个web页面,生成验证码后,想利用公司钉钉发验证码给指定的人,在服务端其他参数都已经可以获取到了,但就是这个临时授权码code不知道怎么获取,看了文...
清水137life 2019-12-01 21:50:36 4230 浏览量 回答数 1

回答

Swagger 是一个规范和完整的前端框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 规范也逐渐发展成为了 OpenAPI 规范。 Springfox 是一个集成了 Swagger,基于 Sring MVC/Spring Webflux 实现的一个 Swagger 描述文件生成框架,通过使用它定义的一些描述接口的注解自动生成 Swagger 的描述文件,使 Swagger 能够展示并调用接口。 相信很多人都听说和使用过 Swagger 和 Springfox,这里就不再赘述了。 Dubbo-Admin 中有接口测试功能,但是缺少接口描述的文档,所以该测试功能比较适合接口开发人员用于测试接口。而其他人想要使用该功能就必须先通过接口开发者编写的文档或者其他方式,了解清楚接口信息才能使用该功能测试接口。 Dubbo 这边有没有集合文档展示和测试功能,可以不用写文档就能把接口直接给调用方,类似 Swagger/Springfox 的工具呢? 之前做过一些调研,找到一些类似的工具: 有些是基于 Springfox 做的,直接一个文本域放 JSON,与目前 Admin 中的测试功能大同小异。 有些是直接基于 Swagger 的 Java 版 OpenApI 规范生成工具做的,能把一些基础数据类型的简单参数作为表单项展示。 它们都有一个共同点:会把你的提供者变为 Web 项目。当然有些提供者是通过 web 容器加载启动的,甚至也有和 web 工程在一起的,那就无所谓了。 但也有非 web 的提供者,为了文档我得把它变为 web 项目吗?(还要引入一堆 Web 框架的依赖?比如 Spring MVC?)或者说生产环境打包时,删除它的引用和代码里的相关注解? 有没有简单点的方式呢? OpenAPI 中没有 RPC 的规范,Swagger 是 OpenAPI 的实现,所以也不支持 RPC 相关调用。Springfox 是通过 Swagger 实现的 RESTful API 的工具,而 RESTful 又是基于 Web 的,Dubbo 没法直接使用。我们最终选择了自己实现: 提供一些描述接口信息的简单注解。 在提供者启动时解析注解并缓存解析结果。 在提供者增加几个 Dubbo-Api-Docs 使用的获取接口信息的接口。 在 Dubbo Admin 侧通过 Dubbo 泛化调用实现 Http 方式调用 Dubbo 接口的网关。 在 Dubbo Admin 侧实现接口信息展示和调用接口功能。 下列情况中的参数直接展示为表单项,其他的展示为 JSON。 方法参数为基础数据类型的 方法参数为一个 Bean,Bena 中属性为基础数据类型的 很少的第三方依赖,甚至大部分都是你项目里本身就使用的。 可以通过 profile 决定是否加载,打包时简单地修改 profile 就能区分生产和测试,甚至 profile 你本来就使用了。
苍霞学子 2021-03-18 00:08:05 0 浏览量 回答数 0

回答

Re用了.net的SDK我调用的API里面居然是空的 上图 ------------------------- Re用了.net的SDK我调用的API里面居然是空的 求教 那个第一个和最后个参数怎么传 我是做3D的 对WEB了解很少 ------------------------- Re用了.net的SDK我调用的API里面居然是空的 啊 你用的第二个能行吗?第二个的构造函数中也是什么都没做啊 只有4个参数那个构造才有内容 ------------------------- Re用了.net的SDK我调用的API里面居然是空的 try {             ossClient = new OssClient(accessid,accesskey);             OssObject oss = ossClient.GetObject(bucketName,"/appid.txt");             Debug.LogError(oss.Key);             Debug.LogError("4");                //OssObject ff = this.GetObject();         }         catch (System.Exception ex) {             Debug.LogError(ex.ToString());     } 这样写应该没错吧 我就想先试试获取到一个文件打印它的KEY而已,但是总是报错
ruixin 2019-12-02 02:16:39 0 浏览量 回答数 0

回答

Web应用防火墙的接口调用是向WAF API的服务端地址发送HTTP GET请求,并按照接口说明在请求中加入相应请求参数,调用后系统会返回处理结果。 以下Python示例代码演示了如何添加公共参数和接口请求参数、如何用请求参数构造规范化请求字符串、如何构造StringToSign字符串,以及如何获得OpenAPI服务端地址,最终以Get方式发送HTTP请求获取相应的响应结果。 下载Python示例代码 说明 如果您需要使用以下示例,请替换示例中的公共参数及接口请求参数信息。 定义公共参数 #! /usr/bin/env python -- coding: utf-8 -- import hashlib import urllib import requests import hmac import random import datetime import sys class OpenAPI(object): def init(self, signature_version='1.0', api_url=None, ak=None, sk=None, api_version=None): assert api_url is not None assert ak is not None assert sk is not None assert api_version is not None self.signature_once = 0 self.signature_method = 'HMAC-SHA1' self.signature_version = signature_version self.api_version = api_version self.format = 'json' self.signature_method = 'HMAC-SHA1' self.api_url = api_url self.access_key = ak self.access_secret = sk def __gen_common_params(self, req_type, api_version, access_key, access_secret, http_params): while 1: rand_int = random.randint(10, 999999999) if rand_int != self.signature_once: self.signature_once = rand_int break # 当前步骤中是否含有AccessKey参数 if access_key == None: return None http_params.append(('AccessKeyId', access_key)) http_params.append(('Format', self.format)) http_params.append(('Version', api_version)) timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ") http_params.append(('Timestamp', timestamp)) http_params.append(('SignatureMethod', self.signature_method)) http_params.append(('SignatureVersion', self.signature_version)) http_params.append(('SignatureNonce', str(self.signature_once))) # 签名 http_params = self.sign(req_type, http_params, access_secret) return urllib.urlencode(http_params) def get(self, http_params=[], host=None, execute=True): data = self.__gen_common_params('GET', self.api_version, self.access_key, self.access_secret, http_params) api_url = self.api_url if data == None: url = "%s" % (api_url) else: url = "%s/?" % api_url + data print ("URL: %s"%url) if execute is False: return url ret = {} try: if host is not None: response = requests.get(url,headers={'Host':host}, verify=False) else: response = requests.get(url, verify=False) ret['code'] = response.status_code ret['data'] = response.text except Exception as e: ret['data'] = str(e) return ret def __get_data(self, http_params): params = self.__gen_common_params('POST', self.api_version, self.access_key, self.access_secret, http_params) if params == []: data = None else: data = params.replace("+", "%20") data = data.replace("*", "%2A") data = data.replace("%7E", "~") return data def post(self, http_params=[], out_fd=sys.stdout): data = self.__get_data(self.api_version, self.access_key, self.access_secret, http_params) api_url = self.api_url out_fd.write(u"[%s] --> (POST):%s\n%s\n" % (datetime.datetime.now(), api_url, data)) ret = requests.post(api_url, data, verify=False) print (ret.text) return ret def sign(self, http_method, http_params, secret): list_params = sorted(http_params, key=lambda d: d[0]) #print list_params url_encode_str = urllib.urlencode(list_params) #print url_encode_str url_encode_str = url_encode_str.replace("+", "%20") url_encode_str = url_encode_str.replace("*", "%2A") url_encode_str = url_encode_str.replace("%7E", "~") string_to_sign = http_method + "&%2F&" + urllib.quote(url_encode_str) #print string_to_sign hmac_key = str(secret + "&") sign_value = str(hmac.new(hmac_key, string_to_sign, hashlib.sha1).digest().encode('base64').rstrip()) http_params.append(('Signature', sign_value)) return http_params 生成接口调用请求 说明 以下代码示例以调用ModifyWafSwitch接口开启Web应用攻击防护功能为例。 from open_api import OpenAPI class Waf(OpenAPI): def init(self, api_url, ak, sk, api_version, instance_id, region): super(Waf, self).__init__(api_url=api_url, ak=ak, sk=sk, api_version=api_version) self.instance_id = instance_id self.region = region def ModifyWafSwitch(self,domain, instance_id=None, region='cn', service_on=1, execute=True): if instance_id is None: instance_id = self.instance_id if region is None: region = self.region params = [ ('Action', 'ModifyWafSwitch'), ('InstanceId', instance_id), ('Domain', domain), ('Region',region), ('ServiceOn', service_on) ] print (params) return self.get(http_params=params,execute=execute) if name == "main": api_url = "https://wafopenapi.cn-hangzhou.aliyuncs.com" # 填写您账号的AccessKeyId信息 ak = "" # 填写您账号的AccessKeyScecret信息 sk = "" # 填写您WAF的实例ID,您可以通过调用GetPayInfo接口获取InstanceID信息 instance_id = "" # 填写您WAF实例所在地域信息 region = "" api_version = "2018-01-17" t = Waf(api_url=api_url, ak=ak, sk=sk, api_version=api_version, instance_id=instance_id, region=region) print (t.ModifyWafSwitch(domain="", service_on=1)) 发送HTTP GET请求 通过上述代码得到HTTP请求,向WAF API的服务端地址发送该HTTP GET请求。 请求示例 https://wafopenapi.cn-hangzhou.aliyuncs.com/?Action=ModifyWafSwitch&Domain=www.aliyun.com&ServiceOn=1&Region=cn&InstanceId=waf_elasticity-cn-0xldbqtm005&TimeStamp=2018-08-23T12:46:24Z&Format=JSON&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2018-01-17&SignatureVersion=1.0&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D 获得响应结果 最终收到WAF API服务端返回的响应结果。 返回示例 { "RequestId":"D7861F61-5B61-46CE-A47C-6B19160D5EB0", "Result":{ "Status":2, "WafTaskId":"aliyun.waf.20180712214032277.qmxI9a" } }
保持可爱mmm 2020-03-27 18:42:13 0 浏览量 回答数 0

问题

【视频】前端网络(性能)监测工具 berserkJS

各位好:      今天给大家带来的是一款前段网络监测工具的教程:berserkjs      berserkJS 是基于 Qt (C++跨平台库)开发的前端网...
随歌 2019-12-01 22:06:18 11102 浏览量 回答数 0

问题

临时授权访问

STS介绍 OSS可以通过阿里云STS服务,临时进行授权访问。阿里云STS (Security Token Service) 是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或联邦用...
青衫无名 2019-12-01 21:49:07 2028 浏览量 回答数 0

回答

绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 引入js文件在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK 通过config接口注入权限验证信息所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); appId:在微信公众号中查看信息 timestamp:时间戳,可以通过js获取 Date.parse(new Date())获取当前时间的毫秒值 nonceStr 通过uuid生成随机字符串(永远不会重复) signature 签名的获取: 1 通过 appId和appSecret 获取:access_token 发送请求 $.ajax({ type: "GET", async:false, url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET', success: function(data){ config=data; console.log(config); } }) 2 通过access_token获取signature 签名 签名算法 签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。 即signature=sha1(string1) demo: noncestr=Wm3WZYTPz0wzccnWjsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qgtimestamp=1414587457url=http://mp.weixin.qq.com?params=value步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1: jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value步骤2. 对string1进行sha1签名,得到signature: 0f9de62fce790f9a083d5c99e95740ceb90c27ed注意事项 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。签名用的url必须是调用JS接口页面的完整URL。出于安全考虑,开发者必须在服务器端实现签名的逻辑。配置信息获取完之后: 通过ready接口处理成功验证wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口, //则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 });通过error接口处理失败验证wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); //转发到朋友圈 wx.onMenuShareTimeline({ title: 'JSSDK朋友圈转发测试', link: link, imgUrl: imgUrl, success: function () { alert('转发成功!'); }, cancel: function () { alert('转发失败!'); } }); //转发给朋友 wx.onMenuShareAppMessage({ title: 'JSSDK朋友圈转发测试', desc: '转发给朋友', link: link, imgUrl: imgUrl, type: 'link', dataUrl: '', success: function () { alert('转发成功!'); }, cancel: function () { alert('转发失败!'); } }); ps:来源网络
元芳啊 2019-12-02 00:54:55 0 浏览量 回答数 0

问题

【精品问答】音视频通信

API参考 音视频通信的API有哪些? https://developer.aliyun.com/ask/280450 音视频通信的请求结构有哪些? https://developer.aliyun.com...
montos 2020-04-08 20:55:26 4 浏览量 回答数 1

回答

云函数代码结构 以下代码示例展示了如何从数据库 images 里面查出特定用户上传的图片记录。 云函数里可以直接通过 API 调用数据存储,文件存储的服务资源以及其他云函数。 ● 当云函数被客户端或者其他云函数调用时,可以通过 ctx.args 获得调用传来的 参数。 ● 可以通过 ctx.logger 方法打印不同类型的日志信息,然后在云函数控制台中查 看执行日志。 ● 在云函数内通过 ctx.env 来获取环境参数,例如 SpaceId、调用来源、客户 端源 IP 和客户端 UserAgent 等信息。ctx.env 是一个 object,它包含 MP_ SPACE_ID(SpaceId),MP_SOURCE(调用来源),MP_USER_AGENT (客户端 User-agent),MP_CLIENT_IP(客户端 IP)。 ● 在云函数中,您可以直接调用同一环境(空间)的数据存储和文件存储服务以 及获取当前请求用户的基本信息。ctx.mpserverless 在云函数封装了小程序 的基础服务,API 使用方式和客户端一致。 ● 通过 ctx.mpserverless.db 调用云数据库能力,如 ctx.mpserverless.db.collection('user').find({ uid: args.uid })。 ● 通过 ctx.mpserverless.file 调用文件存储能力,如 ctx.mpserverless.file. deleteFile(args.filePathUrl)。 ● 通过 ctx.mpserverless.user 获取当前访问用户基本信息,如 ctx.mpserverless.user.getInfo()。 ● 通过 ctx.mpserverless.function 调用云函数能力,如 mpserverless.function. invoke('dataAnalytics', {range: 30}) 调用其他云函数。 ● 通过 ctx.httpclient HTTP 请求方法,无需额外依赖,您就可以请求任何 HTTP 和 HTTPS 协 议 的 Web 服 务。 如 ctx.httpclient.request('https://www.alipay.com/x/notFound.htm')。 module.exports = async (ctx) => { ctx.logger.info('%s %s', ctx.env.MP_SPACE_ID, ctx.args.username); const images = await ctx.mpserverless.db.collection('images').find({ owner: ctx.args.username }); return { images }; };
1358896759097293 2021-03-12 23:18:48 0 浏览量 回答数 0

问题

JS-API权限签名算法

开发者在web页面使用钉钉容器提供的jsapi时,需要验证调用权限,并以参数signature标识合法性 签名生成的规则: List keyArray = sort(noncestr...
李¥风 2019-12-01 20:59:22 7515 浏览量 回答数 4

问题

loadUserByUsername获取空用户名

我正在使用spring boot 2.1.9.RELEASE spring-boot-starter-security 2.1.8.RELEASE但是当我使用loadByUsername函数时,我得到一个空用户名 我的登录页...
小六码奴 2019-12-01 21:49:10 18 浏览量 回答数 0

问题

点播和播放器下载需要的参数的区别

阿里云视频点播总是会出现VideoId、AccessKeyId、AccessKeySecret、playKey、playauth这几个值,这些值到底是什么?为什么会需要这些值?这些值到底从哪里拿到&...
樰篱 2019-12-01 21:04:15 2751 浏览量 回答数 1

问题

如何直接上传文件至OSS,不用服务器中转

阅读提示:阅读本帖需要有一定的专业编程基础。 用到的技术:php、android(以移动端举例,WEB、IOS、Flash等略同) OSS真的是个好东西࿰...
cevin 2019-12-01 21:37:32 31842 浏览量 回答数 11

回答

这取决于目标服务器接受什么。没有明确的标准。另请参阅Wikipedia:查询字符串: 尽管没有明确的标准,但是大多数Web框架都允许将多个值与单个字段相关联(例如field1=value1&field1=value2&field2=value3)。[4] [5] 通常,当目标服务器使用强类型的编程语言(例如Java(Servlet))时,您可以将它们作为具有相同名称的多个参数发送。API通常提供一种专用方法来获取多个参数值作为数组。 foo=value1&foo=value2&foo=value3 String[] foo = request.getParameterValues("foo"); // [value1, value2, value3] 在request.getParameter("foo")也将在它的工作,但它会只返回第一个值。 String foo = request.getParameter("foo"); // value1 而且,当目标服务器使用弱类型语言(如PHP或RoR)时,则需要在参数名称后加上大括号[],以触发该语言返回值数组而不是单个值。 foo[]=value1&foo[]=value2&foo[]=value3 $foo = $_GET["foo"]; // [value1, value2, value3] echo is_array($foo); // true 如果仍然使用foo=value1&foo=value2&foo=value3,则它将仅返回第一个值。 $foo = $_GET["foo"]; // value1 echo is_array($foo); // false 请注意,当发送foo[]=value1&foo[]=value2&foo[]=value3到Java Servlet时,仍然可以获取它们,但是需要使用包括括号在内的确切参数名称。 String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
保持可爱mmm 2020-02-10 16:07:02 0 浏览量 回答数 0

问题

【精品问答】ET工业大脑

ET工业大脑 什么是Web应用托管服务Web+? 什么是ET工业大脑开放平台? ET工业大脑开放平台功能原理是什么? ET工业大脑开放平台采用什么样的架构? ET工业...
问问小秘 2020-04-07 16:20:14 38 浏览量 回答数 1

回答

模板是一个 JSON 格式的文本文件,使用 UTF-8 编码。模板用于创建资源栈,是描述基础设施和架构的蓝图。模板编辑者在模板中定义阿里云资源和配置细节,并说明资源间的依赖关系。 ROS 模板结构 { "ROSTemplateFormatVersion" : "2015-09-01", "Description" : "模板描述信息,可用于说明模板的适用场景、架构说明等。", "Metadata" : { // 关于模板的元数据信息,比如存放用于可视化的布局信息。 }, "Parameters" : { // 定义创建资源栈时,用户可以定制化的参数。 }, "Mappings" : { // 定义映射信息表,映射信息是一种多层的 Map 结构。 }, "Conditions": { // 使用内部条件函数定义条件。这些条件确定何时创建关联的资源。 }, "Resources" : { // 所需资源的详细定义,包括资源间的依赖关系、配置细节等。 }, "Outputs" : { // 用于输出一些资源属性等有用信息。可以通过 API 或控制台获取输出的内容。 } } ROSTemplateFormatVersion(必需) ROS 支持的模板版本号,当前版本号:2015-09-01。 Description(可选) 模板的描述信息。可用于说明模板的适用场景、架构说明等。通常情况下,对模板进行详细描述,有利于模板的用户理解模板的内容。 Metadata(可选) 模板编写者可以使用 Metadata 来存放与模板相关的元数据信息,内容可以是自由的 JSON 格式。 Parameters(可选) 定义创建资源栈时,模板用户可以定制化的参数。通常,模板的编辑者会把 ECS 的规格设计成一个参数。参数支持默认值。使用参数可以增强模板的灵活性,提高复用性。使用模板创建资源栈时,可以根据实际的评估结果来选择合适的规格。 更多详细信息,请参见参数(Parameters)。 Mappings(可选) Mappings 定义了一个多层的映射表,可以通过 Fn::FindInMap 函数来选择 Key 对应的值,或根据不同的输入参数值作为 Key 来查找映射表。例如,您可以根据 Region 不同,自动查找 Region-镜像映射表,从而找到适用的镜像。 更多详细信息,请参见映射(Mappings)。 Conditions(可选) Conditions 使用 Fn::And、Fn::Or、Fn::Not、Fn::Equals 定义条件。多个条件之间用逗号(,)隔开。在创建或更新资源栈时,系统先计算模板中的所有条件,然后再创建资源。创建与 true 条件关联的所有资源,忽略与 false 条件关联的所有资源。 更多详细信息,请参见条件(Conditions)。 Resources(可选) 用于详细定义使用该模板创建的资源栈所包含的资源,包括资源间的依赖关系、配置细节等。 更多详细信息,请参见资源(Resources)。 Outputs(可选) 用于输出一些资源属性等有用信息。可以通过 API 或控制台获取输出的内容。 更多详细信息,请参见输出(Outputs)。 在创建模板时,使用参数(Parameters)可提高模板的灵活性和可复用性。创建资源栈时,可根据实际情况,替换模板中的某些参数值。 例如,要为一个Web应用创建一个资源栈,包含1个负载均衡实例,2个ECS实例,1个RDS实例。如果该Web应用负载较高,可以在创建资源栈时,选择使用高配的ECS实例;否则可以在创建资源栈时,选择使用低配的ECS实例。这种情况下,可以按照如下示例,在模板中定义ECS实例规格参数: "Parameters" : { "InstanceType" : { "Type" : "String", "AllowedValues":["ecs.t1.small","ecs.s1.medium", "ecs.m1.medium", "ecs.c1.large"], "Default": "ecs.t1.small", "Label": "ECS规格类型", "Description" : "请选择创建ECS示例的配置,默认为ecs.t1.small,可选ecs.t1.small, ecs.s1.medium, ecs.m1.medium,ecs.c1.large。" } } 示例中,定义的InstanceType参数允许模板用户在使用模板创建资源栈时,对InstanceType进行重新赋值。如果模板用户不设置参数值,则使用默认值: ecs.t1.small。 在定义资源时
1934890530796658 2020-03-24 17:41:13 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档访问控制移动终端是一个不受信任的环境。为此,SDK提供了两种依赖于您的业务Server的鉴权模式: STS鉴权模式 和 自签名模式 。 STS鉴权模式介绍OSS可以通过阿里云STS服务,临时进行授权访问。阿里云STS (Security Token Service) 是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或联邦用户(用户身份由您自己管理)颁发一个自定义时效和权限的访问凭证,App端称为FederationToken。第三方应用或联邦用户可以使用该访问凭证直接调用阿里云产品API,或者使用阿里云产品提供的SDK来访问云产品API。 您不需要透露您的长期密钥(AccessKey)给第三方应用,只需要生成一个访问令牌并将令牌交给第三方应用即可。这个令牌的访问权限及有效期限都可以由您自定义。您不需要关心权限撤销问题,访问令牌过期后就自动失效。 以APP应用为例,交互流程如下图: 方案的详细描述如下: App用户登录。App用户身份是您自己管理。您可以自定义身份管理系统,也可以使用外部Web账号或OpenID。对于每个有效的App用户来说,AppServer可以确切地定义出每个App用户的最小访问权限。AppServer请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,AppServer需要确定App用户的最小访问权限(用Policy语法描述)以及授权的过期时间。然后通过调用STS的AssumeRole(扮演角色)接口来获取安全令牌。角色管理与使用相关内容请参考RAM使用指南中的角色管理。STS返回给AppServer一个有效的访问凭证,App端称为FederationToken,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId, AccessKeySecret)以及过期时间。AppServer将FederationToken返回给ClientApp。ClientApp可以缓存这个凭证。当凭证失效时,ClientApp需要向AppServer申请新的有效访问凭证。比如,访问凭证有效期为1小时,那么ClientApp可以每30分钟向AppServer请求更新访问凭证。ClientApp使用本地缓存的FederationToken去请求Aliyun Service API。云服务会感知STS访问凭证,并会依赖STS服务来验证访问凭证,并正确响应用户请求。 STS安全令牌详情,请参考《RAM使用指南》中的角色管理。关键是调用STS服务接口AssumeRole来获取有效访问凭证即可。也可以直接使用STS SDK来调用该方法,点击查看。 使用这种模式授权需要先开通阿里云RAM服务。 STS使用手册:点击查看 OSS授权策略配置:点击查看 直接设置StsToken您可以在APP中,预先通过某种方式(如通过网络请求从您的业务Server上)获取一对StsToken,然后用它来初始化SDK。采取这种使用方式,您需要格外关注StsToken的过期时间,在StsToken即将过期时,需要您主动更新新的StsToken到SDK中。 初始化代码为: String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 在您判断到Token即将过期时,您可以重新构造新的OSSClient,也可以通过如下方式更新CredentialProvider: oss.updateCredentialProvider(new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>")); 实现获取StsToken回调如果您期望SDK能自动帮您管理Token的更新,那么,您需要告诉SDK如何获取Token。在SDK的应用中,您需要实现一个回调,这个回调通过您实现的方式去获取一个Federation Token(即StsToken),然后返回。SDK会利用这个Token来进行加签处理,并在需要更新时主动调用这个回调获取Token,如图示: String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";OSSCredentialProvider credentialProvider = new OSSFederationCredentialProvider() { @Override public OSSFederationToken getFederationToken() { // 您需要在这里实现获取一个FederationToken,并构造成OSSFederationToken对象返回 // 如果因为某种原因获取失败,可直接返回nil OSSFederationToken * token; // 下面是一些获取token的代码,比如从您的server获取 ... return token; }};OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 此外,如果您已经通过别的方式拿到token所需的各个字段,也可以在这个回调中直接返回。如果这么做的话,您需要自己处理token的更新,更新后重新设置该OSSClient实例的OSSCredentialProvider。 使用示例: 假设您搭建的server地址为: http://localhost:8080/distribute-token.json ,并假设访问这个地址,返回的数据如下: { "StatusCode": 200, "AccessKeyId":"STS.iA645eTOXEqP3cg3VeHf", "AccessKeySecret":"rV3VQrpFQ4BsyHSAvi5NVLpPIVffDJv4LojUBZCf", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"CAES7QIIARKAAZPlqaN9ILiQZPS+JDkS/GSZN45RLx4YS/p3OgaUC+oJl3XSlbJ7StKpQ...."}那么,您可以这么实现一个OSSFederationCredentialProvider实例: OSSCredentialProvider credetialProvider = new OSSFederationCredentialProvider() { @Override public OSSFederationToken getFederationToken() { try { URL stsUrl = new URL("http://localhost:8080/distribute-token.json"); HttpURLConnection conn = (HttpURLConnection) stsUrl.openConnection(); InputStream input = conn.getInputStream(); String jsonText = IOUtils.readStreamAsString(input, OSSConstants.DEFAULT_CHARSET_NAME); JSONObject jsonObjs = new JSONObject(jsonText); String ak = jsonObjs.getString("AccessKeyId"); String sk = jsonObjs.getString("AccessKeySecret"); String token = jsonObjs.getString("SecurityToken"); String expiration = jsonObjs.getString("Expiration"); return new OSSFederationToken(ak, sk, token, expiration); } catch (Exception e) { e.printStackTrace(); } return null; }}; 自签名模式您可以把AccessKeyId/AccessKeySecret保存在您的业务server,然后在SDK实现回调,将需要加签的合并好的签名串POST到server,您在业务server对这个串按照OSS规定的签名算法签名之后,返回给该回调函数,再由回调返回。 签名算法参考:点击查看 content是已经根据请求各个参数拼接后的字符串,所以算法为: signature = "OSS " + AccessKeyId + ":" + base64(hmac-sha1(AccessKeySecret, content))代码如下: String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";credentialProvider = new OSSCustomSignerCredentialProvider() { @Override public String signContent(String content) { // 您需要在这里依照OSS规定的签名算法,实现加签一串字符内容,并把得到的签名传拼接上AccessKeyId后返回 // 一般实现是,将字符内容post到您的业务服务器,然后返回签名 // 如果因为某种原因加签失败,描述error信息后,返回nil // 以下是用本地算法进行的演示 return "OSS " + AccessKeyId + ":" + base64(hmac-sha1(AccessKeySecret, content)); }};OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 特别注意: 无论是STS鉴权模式,还是自签名模式,您实现的回调函数,都需要保证调用时返回结果。所以,如果您在其中实现了向业务server获取token、signature的网络请求,建议调用网络库的同步接口。回调都是在SDK具体请求的时候,在请求的子线程中执行,所以不会阻塞主线程。
2019-12-01 23:14:04 0 浏览量 回答数 0

回答

亲,tomcat6.0以下又报错 The server does not support version 3.0 of the J2EE Web module specification可以查看,看是否能解决http://www.cnblogs.com/xwdreamer/archive/2011/12/09/2296913.html; 要修改微应用导航栏改掉,导航栏选项和背景色,需要有调用jsapi的权限,见文档http://open.dingtalk.com/doc/#js-api权限签名算法,使用步骤如下: (1)首先需要获取jsapi_ticket (2)然后在web页面加载到钉钉容器时,通过jsapi权限验证配置接口验证可用的jsapi,签名生成算法步骤 步骤1. sort()含义为对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序) 步骤2. assemble()含义为根据步骤1中获的参数字段的顺序,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串 步骤2. sha1()的含义为对在步骤2拼接好的字符串进行sha1加密 其中dd.config({     agentId: '', // 必填,微应用ID     corpId: '',//必填,企业ID     timeStamp: , // 必填,生成签名的时间戳,自己填写即可     nonceStr: '', // 必填,生成签名的随机串,自己填写即可     signature: '', // 必填,签名,见上面的步骤(2)     jsApiList: ['device.notification.alert', 'device.notification.confirm'] // 必填,需要使用的jsapi列表 }); 如有问题,请及时联系
竹梅 2019-12-02 00:27:35 0 浏览量 回答数 0

问题

【精品问答】钉钉开放平台问答合集

1.应用服务商的入驻标准是什么? 2.如何申请入驻服务商? 3.未通过服务商审核怎么办? 4.如果未通过应用服务商申请可以开始开发应用吗? 5.钉钉云是什么? 6. 调工作通...
游客2q7uranxketok 2021-02-25 21:08:32 85 浏览量 回答数 1

回答

云函数(FaaS)是一段运行在云端的、轻量的、无关联的、并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。 在客户端只需依赖mpserverless-sdk,在应用的上下文中进行简单的鉴权配置,即可调用云函数。 云函数的入参只有一个ctx对象,该对象可获取调用的云函数时传入的参数,也可获取小程序serverless服务空间的云数据库,云存储等服务。 例如,我们定义一个云函数,名为hello。代码如下所示: //云函数定义在index.js中,此文件为云函数的入口文件 module.exports = ctx => { const args = ctx.args; return { "text": args.hello, }; };云函数支持使用Node.js进行开发。您可将代码提交到云端运行,在客户端使用小程序Serverless提供的API进行调用。您还可以在云函数中直接通过API调用数据存储和文件存储的服务资源。 说明 目前云函数内不能调用其他云函数,只支持客户端的使用场景,例如支付宝小程序。 步骤一 定义云函数 关联上对应的后端云服务后,您可以在服务端目录中编写云函数的代码。 登录小程序云控制台,创建云函数。 详细操作,请参见新建云函数。 注意 云函数的名称必须和要上传的Node.js代码包名称一致。 新建云函数 在小程序的server/functions目录下创建云函数目录。 其中index.js是云函数getImageList的入口文件。 └── server/ └── functions └── getImageList └── index.js 编写云函数代码。 以下代码示例展示了如何从数据库images里面查出特定用户上传的图片记录。 module.exports = async (ctx) => { const images = await ctx.mpserverless.db.collection('images').find({ owner: ctx.args.username }); return { images }; }; 说明 云函数的返回值类型仅支持JSON格式。 打包云函数文件。 确保云函数文件名称和控制台上创建的云函数名称一致且为ZIP格式。 步骤二 部署云函数 编写云函数代码后,您需要将云函数代码上传至控制台发布代码。 在左侧导航栏,选择小程序Serverless > 云函数。 单击已创建的函数名称链接。 在发布管理页签,单击上传js包或更新js包,然后选择要上传的代码包。 说明 上传的代码包必须满足以下要求: 代码包的名称必须和在控制台上创建的函数名称一致。 代码包必须是.zip文件。 上传的代码包必须包含index.js文件。 上传成功后,单击代码部署。 步骤三 调用云函数 云函数代码发布后,在客户端您可以使用mpserverless.function.invoke方法调用上述定义的云函数。 以下代码示例展示了如何获取用户上传的图片记录,然后更新页面数据。 // 引入MPServerless模块 const MPServerless = require('@alicloud/mpserverless-sdk'); // 初始化MPServerless对象 const mpServerless = new MPServerless({ uploadFile: my.uploadFile, request: my.request, getAuthCode: my.getAuthCode, }, { appId: '1234456789', // 小程序应用标识 spaceId: 'db4dd657-7041-470a-90xxxxx', // 服务空间标识 clientSecret: '6c3c86xxxx6', // 服务空间 secret key endpoint: 'https://api.bspapp.com', // 服务空间地址,从小程序 serverless 控制台处获得 }); // 调用云函数getImageList mpServerless.function.invoke('getImageList', { username: 'Vincent', }).then((res) => { if (res.success && res.result) { this.setData({ imageList: res.result.images }); } }).catch(console.error); 云函数是一个后端服务,有时需要获得从客户端传来的参数。通过云函数内置的ctx.args方法,您可以获得从客户端传来的参数。 客户端代码 以下是客户端代码示例: await mpserverless.function.invoke('hello', { hello: 'world' }); 云函数代码 以下是云函数代码示例: module.exports = async ctx => { ctx.logger.info('hello %s', ctx.args.hello); }; 在云函数中,您可以直接调用同一环境(空间)的数据存储和文件存储服务。ctx.mpserverless在云函数封装了小程序的基础服务, API使用方式和客户端一致。 例如,要从数据存储获取数据,可以直接调用ctx.mpserverless.db方法: module.exports = async ctx => { const args = ctx.args; return await ctx.mpserverless.db.collection('user').find({ uid: args.uid }); }; 云函数(FaaS)是一段运行在云端的、轻量的、无关联的、并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。 在客户端只需依赖mpserverless-sdk,在应用的上下文中进行简单的鉴权配置,即可调用云函数。 云函数的入参只有一个ctx对象,该对象可获取调用的云函数时传入的参数,也可获取小程序serverless服务空间的云数据库,云存储等服务。 云函数提供了 ctx.httpclient HTTP 请求方法。无需额外依赖,您就可以请求任何 HTTP 和 HTTPS 协议的 Web 服务。 例如,请求一个网页: module.exports = async ctx => { const res = await ctx.httpclient.request('https://www.alipay.com/x/notFound.htm'); return { html: res.status === 200 ? res.data : '', }; }; 其中,ctx.httpclient返回的是一个urllib实例。 云函数(FaaS)是一段运行在云端的、轻量的、无关联的、并且可重用的代码。无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。 在客户端只需依赖mpserverless-sdk,在应用的上下文中进行简单的鉴权配置,即可调用云函数。 云函数的入参只有一个ctx对象,该对象可获取调用的云函数时传入的参数,也可获取小程序serverless服务空间的云数据库,云存储等服务。
南霸天霸南北 2020-02-17 16:48:28 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档使用STS进行临时授权OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问。阿里云STS是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。STS更详细的解释请参见STS介绍。 STS的优势如下: 您无需透露您的长期密钥(AccessKey)给第三方应用,只需生成一个访问令牌并将令牌交给第三方应用。您可以自定义这个令牌的访问权限及有效期限。 您无需关心权限撤销问题,访问令牌过期后自动失效。 使用STS访问OSS的流程请参见开发指南中的RAM和STS应用场景实践。 使用STS凭证构造签名请求以下代码用于使用STS凭证构造签名请求: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);// OSS操作。// 关闭OSSClient。ossClient.shutdown(); 使用签名URL进行临时授权生成签名URL您可以将生成的签名URL提供给访客进行临时访问。生成签名URL时,您可以指定URL的过期时间,来限制访客的访问时长。 生成以GET方法访问的签名URL以下代码用于生成以GET方法访问的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);// 关闭OSSClient。ossClient.shutdown(); 生成以其他HTTP方法访问的签名URL如果您想允许访客临时进行其他操作(比如上传或删除文件),需要生成对应的签名URL,例如使用生成PUT的签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);request.setExpiration(expiration);// 设置ContentType。request.setContentType(DEFAULT_OBJECT_CONTENT_TYPE);// 设置自定义元信息。request.addUserMetadata("author", "aliy");// 生成PUT方式的签名URL。URL signedUrl = ossClient.generatePresignedUrl(request);Map<String, String> requestHeaders = new HashMap<String, String>();requestHeaders.put(HttpHeaders.CONTENT_TYPE, DEFAULT_OBJECT_CONTENT_TYPE);requestHeaders.put(OSS_USER_METADATA_PREFIX + "author", "aliy");// 使用签名URL上传文件。ossClient.putObject(signedUrl, new ByteArrayInputStream("Hello OSS".getBytes()), -1, requestHeaders, true);// 关闭OSSClient。ossClient.shutdown(); 通过传入HttpMethod.PUT参数,访客可以使用生成的签名URL上传文件。 生成指定参数的签名URL以下代码用于生成指定参数的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 创建请求。GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);// HttpMethod为PUT。generatePresignedUrlRequest.setMethod(HttpMethod.PUT);// 添加用户自定义元信息。generatePresignedUrlRequest.addUserMetadata("author", "baymax");// 添加Content-Type。generatePresignedUrlRequest.setContentType("application/octet-stream");// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);generatePresignedUrlRequest.setExpiration(expiration);// 生成签名URL。URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传/获取文件使用签名URL获取文件以下代码用于使用签名URL获取指定文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);Date expiration = DateUtil.parseRfc822Date("Wed, 18 Mar 2022 14:20:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);// 设置过期时间。request.setExpiration(expiration);// 生成签名URL(HTTP GET请求)。URL signedUrl = ossClient .generatePresignedUrl(request);System.out.println("signed url for getObject: " + signedUrl);// 使用签名URL发送请求。Map<String, String> customHeaders = new HashMap<String, String>();// 添加GetObject请求头。customHeaders.put("Range", "bytes=100-1000");OSSObject object = ossClient.getObject(signedUrl,customHeaders);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传文件以下代码用于使用签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 生成签名URL。Date expiration = DateUtil.parseRfc822Date("Thu, 19 Mar 2019 18:00:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置过期时间。request.setExpiration(expiration);// 设置Content-Type。request.setContentType("application/octet-stream");// 添加用户自定义元信息。request.addUserMetadata("author", "aliy");// 生成签名URL(HTTP PUT请求)。URL signedUrl = ossClient.generatePresignedUrl(request);System.out.println("signed url for putObject: " + signedUrl);// 使用签名URL发送请求。File f = new File("<yourLocalFile>");FileInputStream fin = new FileInputStream(f);// 添加PutObject请求头。Map<String, String> customHeaders = new HashMap<String, String>();customHeaders.put("Content-Type", "application/octet-stream");customHeaders.put("x-oss-meta-author", "aliy");PutObjectResult result = ossClient.putObject(signedUrl, fin, f.length(), customHeaders);// 关闭OSSClient。ossClient.shutdown();
2019-12-01 23:13:59 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档使用STS进行临时授权OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问。阿里云STS是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。STS更详细的解释请参见STS介绍。 STS的优势如下: 您无需透露您的长期密钥(AccessKey)给第三方应用,只需生成一个访问令牌并将令牌交给第三方应用。您可以自定义这个令牌的访问权限及有效期限。 您无需关心权限撤销问题,访问令牌过期后自动失效。 使用STS访问OSS的流程请参见开发指南中的RAM和STS应用场景实践。 使用STS凭证构造签名请求以下代码用于使用STS凭证构造签名请求: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);// OSS操作。// 关闭OSSClient。ossClient.shutdown(); 使用签名URL进行临时授权生成签名URL您可以将生成的签名URL提供给访客进行临时访问。生成签名URL时,您可以指定URL的过期时间,来限制访客的访问时长。 生成以GET方法访问的签名URL以下代码用于生成以GET方法访问的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);// 关闭OSSClient。ossClient.shutdown(); 生成以其他HTTP方法访问的签名URL如果您想允许访客临时进行其他操作(比如上传或删除文件),需要生成对应的签名URL,例如使用生成PUT的签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);request.setExpiration(expiration);// 设置ContentType。request.setContentType(DEFAULT_OBJECT_CONTENT_TYPE);// 设置自定义元信息。request.addUserMetadata("author", "aliy");// 生成PUT方式的签名URL。URL signedUrl = ossClient.generatePresignedUrl(request);Map<String, String> requestHeaders = new HashMap<String, String>();requestHeaders.put(HttpHeaders.CONTENT_TYPE, DEFAULT_OBJECT_CONTENT_TYPE);requestHeaders.put(OSS_USER_METADATA_PREFIX + "author", "aliy");// 使用签名URL上传文件。ossClient.putObject(signedUrl, new ByteArrayInputStream("Hello OSS".getBytes()), -1, requestHeaders, true);// 关闭OSSClient。ossClient.shutdown(); 通过传入HttpMethod.PUT参数,访客可以使用生成的签名URL上传文件。 生成指定参数的签名URL以下代码用于生成指定参数的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 创建请求。GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);// HttpMethod为PUT。generatePresignedUrlRequest.setMethod(HttpMethod.PUT);// 添加用户自定义元信息。generatePresignedUrlRequest.addUserMetadata("author", "baymax");// 添加Content-Type。generatePresignedUrlRequest.setContentType("application/octet-stream");// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);generatePresignedUrlRequest.setExpiration(expiration);// 生成签名URL。URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传/获取文件使用签名URL获取文件以下代码用于使用签名URL获取指定文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);Date expiration = DateUtil.parseRfc822Date("Wed, 18 Mar 2022 14:20:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);// 设置过期时间。request.setExpiration(expiration);// 生成签名URL(HTTP GET请求)。URL signedUrl = ossClient .generatePresignedUrl(request);System.out.println("signed url for getObject: " + signedUrl);// 使用签名URL发送请求。Map<String, String> customHeaders = new HashMap<String, String>();// 添加GetObject请求头。customHeaders.put("Range", "bytes=100-1000");OSSObject object = ossClient.getObject(signedUrl,customHeaders);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传文件以下代码用于使用签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 生成签名URL。Date expiration = DateUtil.parseRfc822Date("Thu, 19 Mar 2019 18:00:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置过期时间。request.setExpiration(expiration);// 设置Content-Type。request.setContentType("application/octet-stream");// 添加用户自定义元信息。request.addUserMetadata("author", "aliy");// 生成签名URL(HTTP PUT请求)。URL signedUrl = ossClient.generatePresignedUrl(request);System.out.println("signed url for putObject: " + signedUrl);// 使用签名URL发送请求。File f = new File("<yourLocalFile>");FileInputStream fin = new FileInputStream(f);// 添加PutObject请求头。Map<String, String> customHeaders = new HashMap<String, String>();customHeaders.put("Content-Type", "application/octet-stream");customHeaders.put("x-oss-meta-author", "aliy");PutObjectResult result = ossClient.putObject(signedUrl, fin, f.length(), customHeaders);// 关闭OSSClient。ossClient.shutdown();
2019-12-01 23:13:59 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档使用STS进行临时授权OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问。阿里云STS是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。STS更详细的解释请参见STS介绍。 STS的优势如下: 您无需透露您的长期密钥(AccessKey)给第三方应用,只需生成一个访问令牌并将令牌交给第三方应用。您可以自定义这个令牌的访问权限及有效期限。 您无需关心权限撤销问题,访问令牌过期后自动失效。 使用STS访问OSS的流程请参见开发指南中的RAM和STS应用场景实践。 使用STS凭证构造签名请求以下代码用于使用STS凭证构造签名请求: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);// OSS操作。// 关闭OSSClient。ossClient.shutdown(); 使用签名URL进行临时授权生成签名URL您可以将生成的签名URL提供给访客进行临时访问。生成签名URL时,您可以指定URL的过期时间,来限制访客的访问时长。 生成以GET方法访问的签名URL以下代码用于生成以GET方法访问的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);// 关闭OSSClient。ossClient.shutdown(); 生成以其他HTTP方法访问的签名URL如果您想允许访客临时进行其他操作(比如上传或删除文件),需要生成对应的签名URL,例如使用生成PUT的签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);request.setExpiration(expiration);// 设置ContentType。request.setContentType(DEFAULT_OBJECT_CONTENT_TYPE);// 设置自定义元信息。request.addUserMetadata("author", "aliy");// 生成PUT方式的签名URL。URL signedUrl = ossClient.generatePresignedUrl(request);Map<String, String> requestHeaders = new HashMap<String, String>();requestHeaders.put(HttpHeaders.CONTENT_TYPE, DEFAULT_OBJECT_CONTENT_TYPE);requestHeaders.put(OSS_USER_METADATA_PREFIX + "author", "aliy");// 使用签名URL上传文件。ossClient.putObject(signedUrl, new ByteArrayInputStream("Hello OSS".getBytes()), -1, requestHeaders, true);// 关闭OSSClient。ossClient.shutdown(); 通过传入HttpMethod.PUT参数,访客可以使用生成的签名URL上传文件。 生成指定参数的签名URL以下代码用于生成指定参数的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 创建请求。GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);// HttpMethod为PUT。generatePresignedUrlRequest.setMethod(HttpMethod.PUT);// 添加用户自定义元信息。generatePresignedUrlRequest.addUserMetadata("author", "baymax");// 添加Content-Type。generatePresignedUrlRequest.setContentType("application/octet-stream");// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);generatePresignedUrlRequest.setExpiration(expiration);// 生成签名URL。URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传/获取文件使用签名URL获取文件以下代码用于使用签名URL获取指定文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);Date expiration = DateUtil.parseRfc822Date("Wed, 18 Mar 2022 14:20:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);// 设置过期时间。request.setExpiration(expiration);// 生成签名URL(HTTP GET请求)。URL signedUrl = ossClient .generatePresignedUrl(request);System.out.println("signed url for getObject: " + signedUrl);// 使用签名URL发送请求。Map<String, String> customHeaders = new HashMap<String, String>();// 添加GetObject请求头。customHeaders.put("Range", "bytes=100-1000");OSSObject object = ossClient.getObject(signedUrl,customHeaders);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传文件以下代码用于使用签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 生成签名URL。Date expiration = DateUtil.parseRfc822Date("Thu, 19 Mar 2019 18:00:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置过期时间。request.setExpiration(expiration);// 设置Content-Type。request.setContentType("application/octet-stream");// 添加用户自定义元信息。request.addUserMetadata("author", "aliy");// 生成签名URL(HTTP PUT请求)。URL signedUrl = ossClient.generatePresignedUrl(request);System.out.println("signed url for putObject: " + signedUrl);// 使用签名URL发送请求。File f = new File("<yourLocalFile>");FileInputStream fin = new FileInputStream(f);// 添加PutObject请求头。Map<String, String> customHeaders = new HashMap<String, String>();customHeaders.put("Content-Type", "application/octet-stream");customHeaders.put("x-oss-meta-author", "aliy");PutObjectResult result = ossClient.putObject(signedUrl, fin, f.length(), customHeaders);// 关闭OSSClient。ossClient.shutdown();
2019-12-01 23:13:59 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档使用STS进行临时授权OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问。阿里云STS是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。STS更详细的解释请参见STS介绍。 STS的优势如下: 您无需透露您的长期密钥(AccessKey)给第三方应用,只需生成一个访问令牌并将令牌交给第三方应用。您可以自定义这个令牌的访问权限及有效期限。 您无需关心权限撤销问题,访问令牌过期后自动失效。 使用STS访问OSS的流程请参见开发指南中的RAM和STS应用场景实践。 使用STS凭证构造签名请求以下代码用于使用STS凭证构造签名请求: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);// OSS操作。// 关闭OSSClient。ossClient.shutdown(); 使用签名URL进行临时授权生成签名URL您可以将生成的签名URL提供给访客进行临时访问。生成签名URL时,您可以指定URL的过期时间,来限制访客的访问时长。 生成以GET方法访问的签名URL以下代码用于生成以GET方法访问的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);// 关闭OSSClient。ossClient.shutdown(); 生成以其他HTTP方法访问的签名URL如果您想允许访客临时进行其他操作(比如上传或删除文件),需要生成对应的签名URL,例如使用生成PUT的签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String securityToken = "<yourSecurityToken>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);request.setExpiration(expiration);// 设置ContentType。request.setContentType(DEFAULT_OBJECT_CONTENT_TYPE);// 设置自定义元信息。request.addUserMetadata("author", "aliy");// 生成PUT方式的签名URL。URL signedUrl = ossClient.generatePresignedUrl(request);Map<String, String> requestHeaders = new HashMap<String, String>();requestHeaders.put(HttpHeaders.CONTENT_TYPE, DEFAULT_OBJECT_CONTENT_TYPE);requestHeaders.put(OSS_USER_METADATA_PREFIX + "author", "aliy");// 使用签名URL上传文件。ossClient.putObject(signedUrl, new ByteArrayInputStream("Hello OSS".getBytes()), -1, requestHeaders, true);// 关闭OSSClient。ossClient.shutdown(); 通过传入HttpMethod.PUT参数,访客可以使用生成的签名URL上传文件。 生成指定参数的签名URL以下代码用于生成指定参数的签名URL: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 创建请求。GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);// HttpMethod为PUT。generatePresignedUrlRequest.setMethod(HttpMethod.PUT);// 添加用户自定义元信息。generatePresignedUrlRequest.addUserMetadata("author", "baymax");// 添加Content-Type。generatePresignedUrlRequest.setContentType("application/octet-stream");// 设置URL过期时间为1小时。Date expiration = new Date(new Date().getTime() + 3600 * 1000);generatePresignedUrlRequest.setExpiration(expiration);// 生成签名URL。URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传/获取文件使用签名URL获取文件以下代码用于使用签名URL获取指定文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);Date expiration = DateUtil.parseRfc822Date("Wed, 18 Mar 2022 14:20:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);// 设置过期时间。request.setExpiration(expiration);// 生成签名URL(HTTP GET请求)。URL signedUrl = ossClient .generatePresignedUrl(request);System.out.println("signed url for getObject: " + signedUrl);// 使用签名URL发送请求。Map<String, String> customHeaders = new HashMap<String, String>();// 添加GetObject请求头。customHeaders.put("Range", "bytes=100-1000");OSSObject object = ossClient.getObject(signedUrl,customHeaders);// 关闭OSSClient。ossClient.shutdown(); 使用签名URL上传文件以下代码用于使用签名URL上传文件: // Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "<yourAccessKeyId>";String accessKeySecret = "<yourAccessKeySecret>";String bucketName = "<yourBucketName>";String objectName = "<yourObjectName>";// 创建OSSClient实例。OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 生成签名URL。Date expiration = DateUtil.parseRfc822Date("Thu, 19 Mar 2019 18:00:00 GMT");GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);// 设置过期时间。request.setExpiration(expiration);// 设置Content-Type。request.setContentType("application/octet-stream");// 添加用户自定义元信息。request.addUserMetadata("author", "aliy");// 生成签名URL(HTTP PUT请求)。URL signedUrl = ossClient.generatePresignedUrl(request);System.out.println("signed url for putObject: " + signedUrl);// 使用签名URL发送请求。File f = new File("<yourLocalFile>");FileInputStream fin = new FileInputStream(f);// 添加PutObject请求头。Map<String, String> customHeaders = new HashMap<String, String>();customHeaders.put("Content-Type", "application/octet-stream");customHeaders.put("x-oss-meta-author", "aliy");PutObjectResult result = ossClient.putObject(signedUrl, fin, f.length(), customHeaders);// 关闭OSSClient。ossClient.shutdown();
2019-12-01 23:14:00 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT