Próbuję wysłać adres URL danych do php, ale bezskutecznie. Mój plik .js jest następujący.
var dataURL = signaturePad.toDataURL();
alert(dataURL);
$.ajax({
type: "POST",
url: "test.php",
data: {
imgBase64: dataURL
}
}).done(function(o) {
console.log('saved');
alert(o);
});
Wyjście alert (dataURL) jest następujące;
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhkAAADZCAYAAACNbSIWAAAeW.....
Test.php
<?php
if($_POST['imgBase64']) {
$img = $_POST['imgBase64'];
}
else{
$img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhkAAADZCAYAAACNbSIWAAAeW.....";
}
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$fileData = base64_decode($img);
//saving
$timestamp = date('YmdHis');
$fileName = ''.$timestamp.'.png';
echo"$fileData";
file_put_contents($fileName, $fileData);
?>
W moim pliku php podałem wartość mojego alertu do celów testowych. Teraz moja strona php działa w 100% dzięki testowi i nie przekazuje żadnej wartości z mojej funkcji .js. ale z poprawną wartością nie publikuje nawet na mojej stronie php, tylko wtedy, gdy usuwam wszystkie nie standardowe znaki z dataURL, a następnie publikuje, ale jest oczywiste, że dane są uszkodzone.
Aby uniknąć dalszych nieporozumień, poniższy kod działa w 100%, czyli .js i php. gdzie var dataURL = signaturePad.toDataURL (); jest przekazywana do funkcji
function postData(data) {
alert(data);
var desired = data.replace(/[^\w\s]/gi, '');
$.ajax({
type: "POST",
url: "test.php",
data: {
imgBase64: desired
}
}).done(function(o) {
console.log('saved');
alert(o);
});
}
Więc problem polega na tym, że .js nie będzie wysyłał postów z podanym dataUrl ze względu na znaki specjalne, ale nie mogę ich usunąć .. Nawet próbowałem var pożądane = encodeURIComponent (data); wiedźma mogę przynajmniej rozszyfrować na stronie php, ale to też nie chce pisać.
2 odpowiedzi
Dzięki za odpowiedzi ...
Skończyło się na utworzeniu najpierw obiektu blob i wysłaniu go.
function dataURLToBlob(dataURL) {
var parts = dataURL.split(';base64,');
var contentType = parts[0].split(":")[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
$.post("test2.php",
{
name: uInt8Array
},
function(data,status){
alert("Data: " + data + "\nStatus: " + status);
});
}
data: {
imgBase64: data
//send key is imgBase64 and data value is undefined in given scope
//replace data with dataURL
}
A w pliku php zmień to $_POST['image']
na $_POST['imgBase64']