2017-06-15 5 views
0

私はCropIt JQueryプラグインを使って写真をトリミングしてアップロードしています。プラグインは、写真を返すbase64でエンコードされた画像を選択した後です。このように:base64でエンコードされたイメージをどのようにファイルサーバーに正しくアップロードできますか?

$.ajax({ 
    type: 'post', 
    url: 'upload.php', 
    data: $('form').serialize(), 
    success: function (data) {  
     $('.image-editor').cropit('imageSrc', 'images/' + data); 
     $('#change').css("background-image", "url('images/" + data + "')"); 
     modal.style.display = "none"; 
    } 
}); 

をPHPを介してサーバをファイルに画像を検証し、店舗どのように正しく:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA....

私は次のようにPHPにそれを送信するためのAjaxを使用していますか?

今、私はこのようにPHPを使用していますし、それが働いているが、私は前に読んだようでは、この方法は安全ではありませんし、何のいずれかの検証がない:

function decode ($code) { 
    list($type, $code) = explode(';', $code); 
    list(, $code)  = explode(',', $code); 
    $code = base64_decode($code); 

    file_put_contents('images/filename.jpg', $code); // there filename static for example 
} 
$testdata = $_POST["image-data"]; 
decode($testdata); 

echo "filename.jpg"; 

は、私が代わりにmove_uploaded_file()を使用すべきfile_put_contents()?しかし、base64でエンコードされた画像でItをどうすれば達成できますか?

私はこのようなファイルを検証する方法を見て、私はbase64でエンコードされた画像とそれを使用する方法がわからない:コードの下

$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
if ((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/jpg") 
    || ($_FILES["file"]["type"] == "image/pjpeg") 
    || ($_FILES["file"]["type"] == "image/x-png") 
    || ($_FILES["file"]["type"] == "image/png")) 
    && ($_FILES["file"]["size"] < 100000) 
    && in_array($extension, $allowedExts)){ 

    if ($_FILES["file"]["error"] > 0) { 
     echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else { 
     $fileName = $temp[0].".".$temp[1]; 
     $temp[0] = rand(0, 3000); //Set to random number 
     $fileName; 

     if (file_exists("../img/imageDirectory/" . $_FILES["file"]["name"])) { 
      echo $_FILES["file"]["name"] . " already exists. "; 
     } 
     else { 
      move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]); 
      echo "Stored in: " . "../img/imageDirectory/" . $_FILES["file"]["name"]; 
     } 
    } 
} 
else { 
    echo "Invalid file"; 
} 
+0

ある安全性のどのような種類あなたは心配していますか? –

+0

@OliverCharlesworth私は 'move_uploaded_file()'がファイルであるかどうかをチェックするので、 'file_put_contents()'の代わりに 'move_uploaded_file()'を使用する方が良いと思っています。より安全なアップロード方法です。本当かどうかは分かりません。 – Infinity

+0

単純なPOSTデータ(data:url)を送信します。あなたはファイルを送信しないので、 'move_uploaded_file()'を使うことができません。この場合、データ型(この文字列で指定されたmime)のみをチェックし、デコードされたデータをファイルに保存することができます。もちろん、指定した画像タイプを保存することもできます。 – Vitaly

答えて

0

試してみてください。

$encoded = $_POST['image-data']; 
$exp = explode(',', $encoded); 
$data = base64_decode($exp[1]); 
$file = 'images/filename.jpg'; 
file_put_contents($file, $data); 
関連する問題