0

使用RAP将图像绘制到画布中,这是在客户端使用 HTML5 画布标签完成的,效果很好。

假设您使用 Eclipse,在服务器端生成的图像可以在<YOUR WORKSPACE>\.metadata\.plugins\org.eclipse.rap.tools.launch\<YOUR LAUNCH CONFIG>\.metadata\.plugins\org.eclipse.rap.ui\context\rwt-resources\generated.

但是所有这些图像也都缓存在客户端的磁盘上。这些可以使用存储的十六进制转储轻松恢复。但是出于安全限制,这些不能被缓存,只能缓存在内存中。

所以我:

  • 编辑了无意义的 index.html,因为我不想要这个文件,但传输的图像不被缓存
  • 尝试编辑 GET 标头,但事实证明 GET 已正确修改
  • 试图编辑 POST 标头,但事实证明,根据定义 POST 不会缓存任何内容,只要它没有明确定义,这里不是这种情况
    • 参看。RFC:2616 Section:9.5 Topic:POST
  • 检查问题是否与画布标签本身有关(就像在这个SO 线程中假设的toBlob一样)
  • 检查这是否与 HTML5 的应用程序缓存有关

但我在 RAP 客户端中没有发现任何与该问题相关的特定对象的 HTML5 文档中的任何内容。所以我的问题是,如果你有任何想法,我可以如何改变使用 HTML5 画布对象缓存图像的行为。

更新#1

的 ralfstxGC.drawImage(Image)用于将图像绘制到画布上。请看下面的截图。这是您在绘制图像并访问浏览器缓存时将看到的内容。我们只需通过关闭服务器来确保无法访问映像的服务器地址。

缓存图像示例

如果您想查看在此会话中实际绘制的图像,请复制此 pastebin 片段中的所有(CTRL+A 和RAW Paste Data中的光标)内容并将它们粘贴到此处

更新#2

相应增强请求的进度

4

1 回答 1

0

图像不缓存在客户端,而是在服务器端。

我假设您使用该方法GC.drawImage(Image)在 Canvas 中绘制图像。每当您创建 SWTImage时,都会在服务器上以context/rwt-resources/generated/. 由于可以从不同的地方使用相同的图像,因此不会清理此文件(请参阅错误 334367:Image#dispose() 不会从 ResourceManager 注销其资源)。

更新

对不起,我错过了你在谈论浏览器缓存。当然,浏览器也会缓存图片。我们目前无法阻止这种情况,因为图像被注册为静态资源并由 servlet 容器交付,我们无法控制缓存头。

作为一种解决方法,您可以考虑使用服务处理程序提供敏感图像并使用标记支持将其嵌入。有计划将这些外部资源包装在 SWT 图像中。如果您有兴趣,请提交增强请求

于 2014-02-20T09:13:47.190 回答