2016-04-26 19 views
1

.pngイメージファイルを配列バッファに読み込んだ。PHPサーバ上でAJAXを通してアップロードされたバイナリデータを保存する

var readSingleFile = function(e) { 
      var file = e.target.files[0]; 
      if (!file) { 
      return; 
      } 
      var reader = new FileReader(); 
      reader.onload = function(e) { 
      var contents =new Int8Array(e.target.result); 

      $.ajax({ 
        url: 'saveBinaryData.php', 
        type: 'POST', 
        contentType: 'application/octet-stream', 
        data: contents, 
        processData: false 
       }); 
      }; 
      reader.readAsArrayBuffer(file); 
     } 

これは、AJAXが説明するようにPHPファイルに掲載されています。

このバイナリデータをイメージ形式に変換するにはどうすればよいですか?

私のコードは、これまで:

<?php 
if($data=file_get_contents($_POST)){ 
    echo "Error! Data not read!"; 
    return; 
    } 

    $data = imagecreatefromstring($data); 

    var_dump($data); 

    file_put_contents("recentImage1.png", $data); 
    ?> 

これらは、Googleで見つかった様々なソリューションから取得されます。画像ファイルは作成されますが、コンテンツは保持されないため開けません。

+0

あなたはファイルに直接アップロードされたデータを書き込もうとしましたか?私はそれがサーバー側で変換を必要とすべきではないと思う。少なくともそれはAJAXを介して画像をアップロードする方法です(ただし多分私は別のライブラリを使用します)。 –

+0

ええ、それは私がやった最初のことでした - 喜びはありません。後で 'imagecreatefromstring()'を見ました。 – LeDoc

+0

'file_get_contents()は、パラメータ1が有効なパスであることを期待しています。/ var/www/html/mqttHandscan/saveBinaryData.php' - Apache2エラーログから取得しました – LeDoc

答えて

1

これは、アップロードされたファイル保存し、簡単な作業のデモです:

JS:

<script src='https://code.jquery.com/jquery-2.2.3.min.js'></script> 
<script>upload = function() { 
    f = new FileReader(); 
    f.onload = function(e) { 
     $.ajax({ 
      url: '?upload', 
      type: 'POST', 
      contentType: 'application/octet-stream;charset=UTF-8', 
      data: e.target.result.split(",", 2)[1], //remove text header 
      processData: false 
     }); 
    }; 

    f.readAsDataURL($('input')[0].files[0]); 
} 
</script> 

HTML:

<input type="file" /> 
<button onclick="upload()">Upload</button> 

そしてPHP:

<?php 
if (isset($_GET['upload'])) { 
    $file = file_get_contents('php://input'); 
    file_put_contents('recentImage1.png', base64_decode($file)); 
} 

すべてタラeは単一のファイルになっていますが、より良い書式設定のために3つに分割されています。

使用される記事: