我为"S3“创建了一个集成类型为"AWS服务”的API方法GET。我定义了从method.request.path.item映射的路径覆盖:{object}

只要路径只包含存储桶本身,它就可以工作,并且{item}的值是(./bucket/mybucketname),mybucketname。
但是,例如,当我指定../bucket/mybucketname/foo/bar/test.txt作为路径时,{item}值应该是mybucketname/foo/bar/test.txt,但它是空。我想是因为嵌套路径
当选择catch-所有路径变量{proxy+}时,无法再选择集成类型"AWS“。
有什么暗示,我做错了什么,或者我应该做什么,以便通过S3网关从子文件夹中检索文件/文件夹?
发布于 2020-02-21 10:09:29
这可以使用代理资源来完成。
以下是我实现@Johnny90 90想要的目标的步骤:
/bucket资源,然后从Actions下拉菜单中选择Create。然后,在“新建子资源窗格”中执行以下操作。勾选“配置为代理资源”。
使用默认的proxy作为资源名称。
c.资源路径使用{proxy+}。
选择“创建资源”。bucket/{proxy}。
粘贴具有足够权限的IAM角色。
单击“保存”。在将集成请求从HTTP代理集成更改为AWS服务之后,我们必须为API添加一些设置。首先,必须设置URL参数,以便API能够理解集成请求中资源路径中定义的{proxy}变量。
proxy,在映射的from列中键入method.request.path.proxy。第二,从方法执行中选择方法响应。
Content-Type作为名称。
单击“添加响应模型”。键入application/json for Content type并从“模型”下拉菜单中选择“空”。最后,从方法执行中选择Integration。
integration.response.header.Content-Type。以下是我的配置:
整合请求:

综合对策:

方法答复:

发布于 2018-09-14 06:06:11
关键是如何在路径覆盖中传递{object}变量的值。我认为您为来自请求路径的集成请求设置了url路径参数,如下所示:
object = method.request.path.object 我认为问题是因为对象中有"/“,api路径(资源)也是如此。这使得api网关只能在根路径中识别对象。
我所做的是为来自请求querystring的集成请求设置url路径参数,如下所示:
object = method.request.querystring.object它起作用了
或者您可以尝试使用url编码对对象路径进行编码,将'/‘替换为'%2F’。不过我从来没试过。
发布于 2018-06-05 04:26:29
@johnny90 90,首先将其配置为lambda代理,同时将资源{proxy+}...After creating..update集成类型创建为"AWS服务“.Then,您可以将任何AWS服务配置到您的API网关。
https://stackoverflow.com/questions/50600893
复制相似问题