2017-06-13 17 views
1

jQuery $.ajax()を使用してバイナリデータをPHPに送信しようとしていますが、コードが正常に動作しません。誰かが私を少し助けてくれることを願っています。jQuery ajaxからPHPへのバイナリデータの送信

私の状況:最初は、バイナリデータを処理する必要はありませんでした。私はAJAXコールを持っていて、うまく機能しました。 PHPで

$.ajax({ 
     dataType: 'json' 
    , type: 'POST' 
    , data: {foo:bar} 
    , url: // url to send to ... 
    ... 
}); 

、私は後に続いて$foo = $_POST['foo'];

を使用してデータを取得し、送出データのサイズを大きくする必要がありました。 JSONは大きかったので、私は圧縮lib /メソッドを探す必要がありました。私はpakoを選択してjson文字列をUint8配列に圧縮しました。 (あなたはAJAX経由でJSONを送信する前にデータを圧縮するためのより良い方法があると思われる場合は、お知らせください、ありがとうございました。)

私のコードになった:

var dataStr = JSON.stringify(jsonData); 
var pako = window.pako; 
var binData = pako.deflate(unescape(encodeURIComponent(dataStr))); // dataStr is now Uint8 array 
$.ajax({ 
    .... 
    , data:{binary:binData, foo:bar...} // and other data 
    , contentType: false 
    , processData: false 
}); 

私はそれがあるためであるかどうかわかりませんしかし、私はもうPHP側でデータを取得することはできません。 私が試してみましたチェック:

  • $_POST
  • $HTTP_RAW_POST_DATA
  • file_get_contents('php://input')

しかし、私が見る何も関連(私は知りませんであってもよいか、デバッグにvar_dump/print_r$HTTP_RAW_POST_DATAfile_get_contents('php://input')の内容はわかりません)

ここに何か不足していますか?本当に助けに感謝します。 false`を、あなたがそれをやっている:あなたは、バイナリデータ

var fd = new FormData(); 
fd.append('binary', new Blob(binData)); 
fd.append('foo', 'bar'); 
binary:binData, foo:bar 
$.ajax({ 
    .... 
    , data:fd, 
    , contentType: false 
    , processData: false 
}); 

を送信する場合は

+1

を経由して、それを読んで、その後(ブロブで)いるFormDataオブジェクトを使用します。 –

答えて

0

これはキー、 `PROCESSDATAある$_FILES['binData']

関連する問題