我正在开发一个xpages应用程序,客户端希望限制粘贴到文档中的图像的大小。我使用上传组件限制了文档,但没有使用粘贴的图像。
有人做过这样的事吗?
由于 沃尔特
答案 0 :(得分:3)
是的,有可能,我没有这样做,但有几种方法可以解决它。
打扰一下,如果你已经知道这一点,但值得指出的是,对于今后遇到这个问题的任何人,我们从Notes / Domino知道的RichText不是XPages,它都是MIME。当我开始使用Xpages时,我对MIME一无所知,所以在理解了所有内容后,我在博客上写了一些摘要,以帮助任何人习惯这个想法。如果你要对InputRichText控件和文件上传等做任何事情,那么值得熟悉MIMEEntity。 http://camerongregor.com/2016/04/21/webmail-ui-you-must-learn-about-mime/
图像有两种方式可以将其转换为“富文本字段”,使用编辑器工具栏上的“图像”按钮上传,或者在某些Web浏览器中,图像可以从剪贴板中粘贴两种不同的方法将以两种不同的方式包括图像
<强>上传强> 如果图像上传,则图像变为与文本/ html相关的某种图像/ jpeg,image / png等的多部分/相关mime实体。在上载图像的时间和保存文档的时间之间,图像文件将位于服务器的磁盘上,与文档关联的xpages持久性文件夹中。例如
xsppers_directory/application-id/session-id/document-id/someimage.png
<强>粘贴强> 粘贴时,图像不会作为文件上载到服务器的持久性文件夹,而是作为数据URI图像包含在text / html中(如上面评论中提到的Stephan)。
所以,如果你想要一个真正的解决方案,你需要解决这两个问题。
处理已粘贴的图片
我在我的博客上共享了一个阻止粘贴图像的插件,因此可以用来完全消除“粘贴”途径,并强制用户下载上传途径。 http://camerongregor.com/2016/11/14/preventing-pasting-of-images-in-ckeditor/
或者,如果您对使用较小的粘贴图像感到满意,您可以通过修改插件来“限制”它,以便检查数据URI的“长度”(如上面Stephan所建议的)并允许粘贴,如果长度低于预定限制。
如果更加可选,您可以找到某种客户端javascript库,它会调整图像大小并在粘贴之前在客户端进行。
或者另一个服务器端选项是你可以在保存时处理'text / html'MIMEEntity的内容,并找到任何使用Data URI的img标签并将其剥离,使用某些服务器端库调整图像大小,例如: ImageMagick并替换它。
处理上传的图片
对于上传的图像,一个强烈的解决方案是扩展InputRichText控件(类似于在Mastering Xpages第二版中演示的方式)并覆盖processAjaxRequest事件,以便在上传图像的过程中调整图像大小并将其放在持久性文件夹中。您可以在那里调整大小,然后使用像ImageMagick这样的东西。
或者不太强烈的版本是在之前的保存事件期间处理'待处理'附件。如果你从DominoDocument获得DominoRichTextItem,你应该能够遍历附件,检查它们的附件状态,将会有一个状态,意味着“待处理/即将上传”,对于这些状态,你可以在它们进入时处理它们持久性文件夹,在它们最终附加到文档之前。
最后,如果您不想涉及xpages运行时/持久性目录,则可以在保存后完成所有操作,只需使用后端NotesDocument和MimeEntity处理。将Image MimeEntities提取到磁盘,使用ImageMagick或类似工具处理它们,然后重新附加它们。
其他人可能有一个我没有想过的更简单的解决方案,但至少这可以让你对可能涉及的内容有所了解。