通过ajax将base64图像数据发送到cfc

send base64 image data to cfc via ajax

本文关键字:cfc 数据 图像 ajax base64 通过      更新时间:2023-09-26

我正在使用html2canvas.js从页面上的div创建<canvas>图像。我想做的是通过ajax将渲染的base64图像发送到cfc,这样我就可以将图像保存到服务器上的文件夹中,并返回页面的文件路径。

我遇到的问题是,当我将base64编码的数据发送到cfc时,cfc会解释数据,但数据中有几个"[无效]"的实例。

如果我只是将图像发布到DOM,那么图像渲染得很好。这里有一个指向要点的链接,该要点创建了正常图像,而我从传递到cfc的参数中转储了正常图像:https://gist.github.com/ronnieduke/d83dfb3e31677191f88e

这是我正在运行的Ajax(其中img.src是上面链接中发布的画布数据的结果)

var image = new Image();
image.id = 'pic';
// This results in the base64 data posted in image-normal.txt in the gist
image.src = canvas.toDataURL("image/png");
		            
var data =  new FormData();
data.append('imgData',image.src);
		            
// Genrate images in cfc
$.ajax({
  url: 'my.cfc?method=generateImage',
  type:'POST',
  data:data,
  dataType:'JSON',
  processData: false,
  cache:false,
  async:false,
  contentType: false,
  success:function(data){
    console.log(data);
  },
  error:function(result){
    alert(result.responseText);
  }
});

这是我的cfc:

<cffunction name="generateImage" output="true" access="remote" returnFormat="JSON">
<cfargument name="imgData" required="true" type="string">
<cfset request.acceptExt = 'image/jpg,image/gif,image/png' />
<cfset image = imageReadBase64(arguments.imageData)>
<cfimage
    action="write"
    destination="image.png"
    source="#image#"
    overwrite="yes"
>

现在发生的情况是imageReadBase64()函数抛出了一个无法读取PNG数据的错误。当我转储arguments.imgData时,我会在上面的要点中的img-cfc.txt中得到结果。这就是包含所有[INVALID]实例的内容。

我发现有趣的是,当仔细比较base64图像的两个版本时,我注意到无论它在哪里有来自cfc版本的[INVALID],字母"QSS"(在各种情况下)都会出现在正常版本中。

例如:

正常:...6s9QSSpN...

从cfc参数转储:...6s9[INVALID]pN...


正常:...CwKGgwqsSH7Qyq1g...

从cfc参数转储:...CwKGgw[INVALID]H7Qyq1g...

我希望特别的角色能有这样的表现,但我不确定"QSS"和什么有什么关系。

我在JS端和CFC端都尝试了各种不同的编码/解码,但都不起作用。任何想法或见解都将不胜感激!

提前感谢

更新:事实上,问题在于"QSS"是Mura中XSS的一个变量。一旦我在settings.ini中添加了字段名作为例外,数据就会正常显示。

事实上,"QSS"是Mura中XSS的一个变量。一旦我在settings.ini中添加了字段名作为例外,数据就会正常显示。

J.Dean更新示例settings.inicfm行:

scriptprotectexceptions=eventid,body

这将告诉Mura在执行XSS黑名单时忽略这些字段。在我的例子中,eventid字段有一长串字符,碰巧其中有QSS,这让我间歇性头痛。