【问题标题】:Display Dynamic Image in Play! Framework Template在播放中显示动态图像!框架模板
【发布时间】:2014-03-17 06:07:54
【问题描述】:

我正在创建一个 Play 2.2 应用程序,根据 URL,我需要从 S3 检索图像并将其呈现给用户。

我知道我可以在获得图像后渲染它,但我想将它嵌入到网页中,以便我可以将其居中并在必要时显示更多信息。

我看到了两种可能的选择:

选项 A:

  • 将图片的 URL 从 S3 返回到模板,然后在 img src 标签中使用它
  • 这将是一个简单的解决方案,而且性能很好,因为我不必通过我的应用程序传递它
  • 但是,我无法控制图像。如果我想调整它的大小或进行任何其他处理,那将是不可能的,这不太理想。

选项 B:首选方法

  • 在我的控制器中从 S3 中检索图像,将其作为参数传递给模板并在图像标签中呈现它
  • 我不知道如何让它工作,但它会是首选选项
  • 我可以调整图像大小并确保它“安全”地显示

第二种可能吗?如果是这样,这是一种可以接受的方法吗?或者性能损失是否值得?

【问题讨论】:

    标签: image scala playframework amazon-s3 playframework-2.0


    【解决方案1】:

    免责声明:无论如何,这是可能的,因为您的问题是“基于意见”的 - 答案也只是一个建议(或建议的一部分)。

    首先,使用一些图形库来处理图像,即我们目前正在使用GraphicsMagick (GM) + gm4java(抱歉,不知道 Scala 的正确库是什么)来进行文件裁剪,速度快,很好,工作就像预计。

    在我们的例子中,我们需要避免向未经授权的用户显示原始/裁剪图像的可能性,因此我们在检查访问权限后使用 Play 的return ok(new File(path)) 将其返回,但对于公共资产,您也可以只使用即一些 HTTP服务器将只处理传递图像,甚至将裁剪后的图像发送回 S3,然后直接在 src 属性中使用它的 URL。

    方法很简单:

    • 有一些 Play 操作可以获取参数,例如原始文件的路径(可以翻译以与 S3 API 一起使用)
    • 它从 S3 获取 origin 文件(如果需要)并将其保存在本地 HDD 上以供进一步处理
    • 使用 GM 处理文件,即裁剪并调整大小,然后将其保存到本地硬盘或发送到 S3 的特殊存储桶/文件夹,并具有唯一名称
    • 最后,它返回文件的路径(在 S3/HDD 上)或将返回此生成文件的操作(有限制)。
    • 您可以在操作后立即删除 originlocal 副本,但也可以将其保留在那里以供其他选项使用(至少一段时间) - 然后使用调度程序清除 早于 X 天的来源

    请记住,每次请求裁剪版本时,将 S3 文件提取到 Play 应用程序并处理它的选项相当糟糕(意味着:缓慢且昂贵),因此添加一些额外的 HDD 空间将originscropped 尽可能长时间地保留在目标计算机上。

    另外提示:从结果缩略图中删除 color profile(带有 GM)会减小它的大小,这样您就可以节省额外的美元转账/存储费用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多