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";
}
ある安全性のどのような種類あなたは心配していますか? –
@OliverCharlesworth私は 'move_uploaded_file()'がファイルであるかどうかをチェックするので、 'file_put_contents()'の代わりに 'move_uploaded_file()'を使用する方が良いと思っています。より安全なアップロード方法です。本当かどうかは分かりません。 – Infinity
単純なPOSTデータ(data:url)を送信します。あなたはファイルを送信しないので、 'move_uploaded_file()'を使うことができません。この場合、データ型(この文字列で指定されたmime)のみをチェックし、デコードされたデータをファイルに保存することができます。もちろん、指定した画像タイプを保存することもできます。 – Vitaly