2015-11-03 89 views
2

我使用html2canvas.js從頁面上的div創建<canvas>圖像。我想要做的是通過ajax將渲染後的base64圖像發送到cfc,這樣我就可以將圖像保存到服務器上的文件夾中,並將文件路徑返回到頁面。通過ajax發送base64圖像數據到cfc

我遇到的問題是,當我將base64編碼數據發送到cfc時,cfc會解釋數據,但會在數據中出現多個「[invalid]」實例。

如果我只是將圖像發佈到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"); 
 
\t \t    
 
var data = new FormData(); 
 
data.append('imgData',image.src); 
 
\t \t    
 
// 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方面的各種不同的編碼/解碼,並沒有任何工作。任何想法或見解將不勝感激!

由於提前,

UPDATE: 的問題,其實是用 'QSS' 是對XSS在村中的變量。一旦我將我的settings.ini中的字段名稱作爲例外添加,數據通常會發生。

+1

您是否已經在CFIDE管理中打開了「啓用全局腳本保護」功能? –

+0

我認爲這個網站是在Railo上,所以我必須檢查。你認爲它應該打開還是關閉? – user3576557

+1

我在CF上關閉它,因爲它檢查傳遞給CF的數據並替換它認爲是危險的東西。請參閱[鏈接](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d69.html) –

回答

0

這個問題實際上是因爲'QSS'是Mura中XSS的一個變量。一旦我將我的settings.ini中的字段名稱作爲例外添加,數據通常會發生。從J.院長 例settings.ini.cfm線

更新:

scriptprotectexceptions=eventid,body 

這將告訴村做了XSS黑名單時忽略這些字段。在我的情況下,eventid字段有很長的一串字符,碰巧有QSS在其中,導致我巨大的間歇性頭痛。