2012-03-08 27 views
2

我有我的畫布表示爲base64字符串。我想將此字符串傳遞給服務器,以便服務器可以使用這些數據製作PDF文檔。將畫布dataURL導出爲PDF - 如何? DataURL太長,無法傳遞到服務器

當我嘗試將數據傳遞給服務器時,我收到414錯誤:'無法加載資源:服務器響應狀態爲414(請求URI過長)。

我已成功下載圖像客戶端。其實我也檢索和下載圖片,只在塑造它在所代表的文件類型沒有任何問題。

$('#ExportPlanView').click(function (e) { 
    //planViewStage.toDataURL(function (e) { window.location = e.replace("image/png", "image/octet-stream")}); 
    planViewStage.toDataURL(function (dataURL) { 
     var output = dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 

     $.ajax({ 
      url: '../PlanView/ExportAsPDF', 
      data: { DataURL: output }, 
      datatype: 'json', 
      success: function (stream) { window.location = stream; } 
     }); 
    }); 
}); 

是正確的解決方案,打破輸出成更小的塊,每個塊發送到服務器,讓服務器重建這些塊,製作pdf,然後將該文件流發送回客戶端以觸發下載?

僅供參考 - 數據URL約爲105k個字符。

回答

2

當您需要傳遞大量數據時使用POST請求。 $.ajax默認爲GET,因此您需要手動定義類型。

要發送的jQuery POST請求,您可以使用這樣的事情:

$.ajax({ 
    url: 'blah.php', 
    type: 'POST', 
    data: { DataURL: output }, 
    datatype: 'json', 
    success: function() { ... } 
}) 
+0

你能解釋一下爲什麼這種變化的東西? – 2012-03-08 23:52:47

+0

POST請求除了URL之外,還可以包含一個單獨的「主體」。 POST請求中的數據在主體中發送,其大小不受查詢字符串限制。通常情況下,PHP中POST主體的默認最大大小爲8兆字節。 – 2012-03-08 23:56:18