我有一个Rails 3应用程序,其图像托管在AWS S3上,并由Paperclip gem管理。
我正在尝试设置它,以便用户可以使用js库在浏览器中编辑这些图像(现在我正在使用Pixastic,但我可以尝试使用Caman)但遇到问题由于来自浏览器的CSRF保护拒绝S3图像来自不同的域,因此js图像处理库失败。
是否有某种方法可以代理图像,使它们看起来来自同一个域,或以其他方式解决此问题?
答案 0 :(得分:3)
我和一位合伙人在CamanJS上度过了一天。
在不知道你是如何构建视图的情况下(根本不知道Pixastic),我会尽力回答。
假设您要链接到html中的原始图片,请将crossorigin='anonymous'
添加到图片代码中:
<img class='image' crossorigin='anonymous' data-camanheight='450' src=<%= @photo.url%>>
这将设置浏览器的期望,即图片不会来自您网站的网址。
我们发现这适用于初始图像,但是当CamanJS的revert()函数重建图像时(在将其转换回canvas元素之前),它会遗漏标题信息,让浏览器知道它可以它是跨源数据。因此,每次我们还原图像时,我们都会再次遇到CORS问题。我简要介绍了Pixastic的文档,但不能告诉你是否会有类似的问题。
注意:超级流畅的体验是我们的首要任务,我们不想设置代理,因此我们的解决方法是在Javascript变量中保留图像标记的克隆并编写我们自己的方法恢复画布,重新克隆图像标记,将其中一个克隆标记推入DOM,然后将其转换为新的画布元素并删除旧的画布元素。它遇到了一些CamanJS特定的行为,使它有点“hacky”。
我的项目合作伙伴已经向CamanJS提交了拉取请求,保留了标题信息,因此很快就可以解决这个问题,使得CamanJS成为跨域资源共享的更好解决方案。
希望这有帮助。