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

标签 javascript jquery ajax cfml railo

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

我遇到的问题是,当我将 Base64 编码数据发送到 cfc 时,cfc 会解释该数据,但数据中存在多个“[无效]”实例。

如果我只是将图像发布到 DOM,则图像渲染得很好。下面是一个要点链接,其中包含创建的普通镜像与我从传递到 cfc 的参数中转储的镜像: https://gist.github.com/ronnieduke/d83dfb3e31677191f88e

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

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 中发布的结果。这就是包含所有[无效]实例的内容。

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

例如:

正常: ...6s9QSSpN...

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

<小时/>

正常: ...CwKGgwqsSH7Qyq1g...

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

我希望特殊字符或其他东西会出现类似的情况,但我不确定“QSS”与任何东西有什么关系。

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

提前致谢,

更新: 事实上,问题在于“QSS”是 Mura 中针对 XSS 的变量。当我在 settings.ini 中添加字段名称作为异常(exception)后,数据就正常显示了。

最佳答案

问题实际上是“QSS”是 Mura 中针对 XSS 的变量。当我在 settings.ini 中添加字段名称作为异常(exception)后,数据就正常显示了。

J. Dean 的更新 settings.ini.cfm 行示例:

scriptprotectexceptions=eventid,body

这将告诉 Mura 在执行 XSS 黑名单时忽略这些字段。就我而言,eventid 字段有很长的字符串,其中恰好有 QSS,导致我间歇性地头痛。

关于javascript - 通过ajax发送base64图像数据到cfc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33491179/

相关文章:

javascript - C# 相当于序列化 json

javascript - 鼠标悬停在一种状态上时,使用 d3 map 更改其他状态的颜色

javascript - 如何将 FullCalendar 事件文本旋转 90 度以垂直

php - 使用 jQuery 获取和发布带有动态 id 的选择下拉列表的值

ruby-on-rails - ajax 检查电子邮件是否已经存在 Ruby on Rails

javascript - json_decode 后未定义索引

javascript - Angular2 在输入改变时调用函数

javascript - 我们可以使用 Jquery 或 Javascript 从 .js 文件读取/写入 Json 数据吗?

javascript - 向下滚动时淡入,向上滚动时淡出

javascript - Rails - 如何在不使用 ":remote => true"的情况下将操作渲染为 JS?