2016-12-09 2 views
1

私は、JavaScriptとjQueryをページ情報に基づいて動的に生成するSVGのかなり複雑なコードを持っています。SVGからAJAX APIへのポスト

私はAJAXポストを保存しています。

これを変換して画像データを正しく送信できないのはなぜですか?

$.get(url, function(xml) { 
    var promises = []; 
    $("record", xml).each(function() { 
     var url = $("f#9 url", this).text(); 
     xhr.responseType = "arraybuffer"; 
     xhr.onload = function() { 
      var arrayBuffer = xhr.response; 
      var base64 = btoa([].reduce.call(new Uint8Array(arrayBuffer), function(p, c) { 
       return p + String.fromCharCode(c) 
      }, '')) 
      var req = ""; 
      req += "<qdbapi>"; 
      req += "<field fid='6' filename='" + name + "'>" + base64 + "</field>"; 
      req += "<field fid='54' >" + Rid + "</field>"; 
      req += "<field fid='44' >" + comment + "</field>"; 
      req += "</qdbapi>"; 

...その後AJAXポストを:

var canvas = $("#canvas")[0]; 
var string= canvas.toDataURL("image/png"); 
base64=string.replace("data:image/png;base64,", ""); 
var rid = kRid || ""; 
var fileN = " Product " + rid + ".png"; 
var req = ""; 
req += "<qdbapi>"; 
req += "<field fid='323' filename='" + fileN + "'>" + base64 + "</field>"; 
req += "</qdbapi>"; 
$.ajax({ 
    type: "POST", 
    contentType: "text/xml", 
    dataType: "xml", 
    processData: false, 
    //url altered 
    url: "https://removed.quickbase.com/db/removedDBID?act=API_EditRecord&rid=" + rid, 
    data: req, 
    success: function(responce) { 
    //auto reload page 
    var str = window.location.href; 
    setTimeout(function() { 
     window.location.href = str; 
    }, 5000); 
    } 
}) 

アイデアは、私は、現在のPNGファイルを取得し、それらを移動するために、他のウェアを使用するコードのこのスニペットから来ました。

私はこれをPHP経由で行うことはできません。

+1

...

var string= canvas.toDataURL("image/png"); string+="=="; base64=string.replace("data:image/png;base64,", ""); 

をし、それが動作huzza base64文字列Base64エンコーディングは、3つのsrc文字が4つの出力文字に変換されることを意味します。入力の長さが3の倍数でない場合は、NULL(0x0)を使用するようにパディングされます。もっと詳しくはこちらをご覧ください:https://en.wikipedia.org/wiki/Base64#Output_Padding – enhzflep

+0

私は盲目的ではありませんでした。これまで書いたajaxスクリプトを使用して、フォーマットがpngでコンソール彼らの最後には「==」があった。盲目的には、私は入力ストリームの長さをチェックすることなく意味します。 –

+0

チェックしたすべてのファイルが最後に '=='を持っていたことは単なるチャンスです。使用される圧縮の実際の程度に応じて、同じ寸法を有する2つのPNGは明らかに異なる長さを有し、したがってパディング要件を有することができる。 – enhzflep

答えて

0

(OPのために掲示される)

私は、ファイルの終わりをマークする==追加するのを忘れ:あなたは盲目的の最後に「==」を追加すべきではない