Quote:
Originally Posted by .Acu³
also via POST und nicht GET.. naja bekomm ich hin. Danke euch.
|
Ja, so 'ne data-URL ist für gewöhnlich recht lang. Hinzu kommt, dass du sie auf dem Server wieder dekodieren musst.
Die vermutlich einfachere Variante wäre, das Bild als Blob zu versenden.
Firefox unterstützt die Methode mozGetAsFile(), Webkit nicht.
Daher folgende Lösung (gefunden auf
und auf den neuesten Stand gebracht):
HTML Code:
function dataURItoBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
var blob = new Blob([ab], {type:mimeString});
return blob;
}
Diese Blob-Datei kannst du dann einem FormData-Element zuweisen und dieses per Ajax verschicken.
HTML Code:
var blob=dataURItoBlob(canvas.toDataURL('image/jpeg'));
var data=new FormData();
data.append('screenshot', blob, 'screenshot.jpg');
Solltest du es mit nativem XMLHttpRequest versenden, kannst du dies wie gewöhnliche POST-Daten senden. jQuery benötigt ein paar zusätzliche Einstellungen, um FormData-Objekte zu versenden:
HTML Code:
$.ajax('save.php', {data:data,type:'POST',processData:false,contentType:false})
Auf den Blob kannst du dann mit der gewöhnlichen Superglobalen $_FILES zugreifen (genau wie bei jedem anderen File-Upload).
PHP Code:
$screenshot=$_FILES['screenshot'];