强制粘贴事件以在base64中编码图像

背景:

我正在为我的公司开发一个HTML5 webapp,它基本上是一个富文本编辑器(类似于Google Docs),它将信息存储在数据库中。

我们使用CKEditor 3作为富文本编辑器和Jquery来实现这一点。

我们选择Google的Chrome作为首选浏览器。

我们的应用程序目前处于alpha测试阶段,拥有一组18个测试人员(与使用该应用程序的测试人员相同)。 这些人是异类的,但他们中几乎所有人都具备基本的计算机技能,主要限于MS Word和MS Excel。

问题:

我们的大多数用户仍然使用word来详细说明文档,主要是因为它具有生成丰富流程图的能力。 当他们将生成的内容复制/粘贴到Chrome时,图像将作为链接粘贴到本地文件(由OS自动生成,位于users / * / temp文件夹中)。 这意味着服务器无法访问这些文件,生成的文档(生成的PDF)不包含图像。

如何强制粘贴的图像在base64中编码,类似于Firefox中发生的情况?

笔记

如果可以向服务器“上传”一个引用为src =“file:// c:\ something”的图像,这将解决我的问题,因为我可以在以后对该图像进行base64编码。

我们无法切换到Firefox,因为它没有完全解决我们的问题(如果图像与文本一起“粘贴”,firefox没有base64编码)并引发其他问题,例如文本时出现的水平滚动条太长,不适合textarea。

是的,不,我相信。

可以拦截粘贴事件并将粘贴的图像作为文件获取,然后使用FileReader将文件读取为数据URI(基本编码为64位的PNG)。

但是,Word似乎发送了对本地文件的引用,由于跨域请求( http://...file:///... ),该文件会生成安全性exception(至少在Chrome上)。 就我而言,无法获取此类本地文件的实际内容,并且内容不会作为剪贴板数据本身发送。

如果您复制“纯”图像(例如,从Paint中删除),您可以获得基本64位编码数据,如下所示: http : //jsfiddle.net/pimvdb/zTAuR/ 。 或者将图像附加为div中的基本64位编码PNG: http : //jsfiddle.net/pimvdb/zTAuR/2/ 。

 div.onpaste = function(e) { var data = e.clipboardData.items[0].getAsFile(); var fr = new FileReader; fr.onloadend = function() { alert(fr.result.substring(0, 100)); // fr.result is all data }; fr.readAsDataURL(data); };