首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务于亚马逊S3资源的惯用Wicket方式

服务于亚马逊S3资源的惯用Wicket方式
EN

Stack Overflow用户
提问于 2016-09-14 05:44:40
回答 1查看 80关注 0票数 1

从AWS S3中为用户上传的资产提供服务的Wicket方式是什么?

要求:

  • 没有从浏览器到S3的直接请求;所有流量都通过我们的服务器代理;
  • 允许浏览器通过缓存中断(通过校验和或数据库中的version字段)缓存资产;
  • 资产只提供给授权用户。

我可以想到以下解决方案:

  1. 为所有解析该SharedResource并流资产的资源提供一个单独的URL: //资源定义:mountResources(“/资产/${path}”),新ResourceReference(“资产”){公共IResource getResource() {返回新的AbstractResource() {公共ResourceResponse newResourceResponse(RequestAttribute属性){ String path =IResource // request S3并流内容//句柄缓存/手动中断}}) //用法:page.add(新图像(“图像”),新SharedResourceReference(“资产”),新PageParameters().add(“路径”,“image.jpg”)
  2. 为每个资产创建一个新的ResourceReference,并将其直接传递给映像。通过让资源实现IStaticCacheableResource来插入Wicket的缓存: 类S3ResourceReference扩展ResourceReference {私有字符串路径;公共S3ResourceReference(字符串路径){.}公共IResource getResource() {返回新的S3Resource (路径);}}类S3Resource扩展AbstractResource实现IStaticCacheableResource { public S3ResourceStream getResourceStream() { S3Object object = getObject( path);返回新S3ResourceStream (对象);} public ResourceResponse newResourceResponse(属性){S3ResourceStream流= getResourceStream();//填充响应}}类S3ResourceStream扩展AbstractResourceStream { S3ResourceStream(S3Object object) { // .}公共InputStream getInputStream() {返回object.objectContent } //覆盖元数据方法} //用法:page.add(新图像(“图像”),新S3ResourceReference("image.jpg"));

这些方法中哪一种看上去更惯用?

在第二个片段中使用IStaticCacheableResource有什么缺陷吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-14 06:42:33

以下是这两种方法的区别:

页面实例锁定

  • 在1)对资源的请求是向应用程序作用域资源提出的。
  • 在2)请求是对页面范围内的资源。

在第二种情况下,Wicket将在资源服务期间锁定对页面实例的访问。因此,我更喜欢使用应用程序作用域资源。

IStaticCacheableResource

如果资源实现了这个接口,Wicket就会将生成的url损坏到资源中,并在其文件名中添加类似-123456789的内容。该哈希是开发模式下的资源修改时间,其MD5校验和是在生产模式下进行的。这有助于缓存。

我希望您认识到,您可以使用1)和2)的混合--一个应用程序范围内的资源引用+ IStaticCacheableResource。

还有一件事:我通常使用new MyResourceReference()而不是new SharedResourceReference("the-name")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39483220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档