Speichern von Binär-string in eine Datei im php-gesendet von POST
Habe ich einen drag-and-drop-uploader für (.jpg -,.ai.pdf,.flv,.psd ....etc.)
Lese ich die Datei als Binär und senden Sie den string in ein jquery-post:
function importZoneDrop(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; //FileList object.
//files is a FileList of File objects. List some properties.
for (var i = 0, f; f = files[i]; i++) {
var start = 0;
var stop = files[0].size - 1;
var reader1 = new FileReader();
var reader2 = new FileReader();
var ext = f.name.substring(f.name.indexOf(".")+1);
if(ext == "JPEG" || ext == "jpeg" || ext == "JPG"){
ext ="jpg";
}
reader1.onload = (function(theFile) {
return function(e) {
//Render thumbnail.
$("#import-drop-zone").append('<img src="'+e.target.result+'" />');
};
})(f);
reader2.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { //DONE == 2
$.post("/process/upload.php",{"blob":evt.target.result,"extension":ext},function(data){
console.log(data);
});
}
};
reader1.readAsDataURL(f);
var blob = f.slice(start, stop + 1);
reader2.readAsBinaryString(f);
}
}
Dies funktioniert, und senden Sie die Datei. Als Nächstes Bekommen Sie die Zeichenfolge, und schreiben Sie es mit file_put_contents:
$extension = $_POST['extension'];
$file = $_POST['blob'];//sent from jquery post
$filePath = "../_temp/monkey.".$extension;
file_put_contents($filePath,$file);
if(file_put_contents($filePath,$file)){
echo json_encode("it worked");
}else{
echo json_encode("it failed");
}
Wird dies erfolgreich die Datei schreiben. Aber die Datei funktioniert nicht, es brach.
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
base64_decode
.Beachten Sie, dass Sie gerade die schreiben die Daten zweimal. Nicht.
ist in Ordnung
Bearbeiten
Zudem lohnt sich nichts, es ist effizienter, laden Sie die Binär-Datei direkt, dann können Sie überspringen
base64_decode
. So etwas wie dieses:Kann man den rest der anzeigen die Veranstaltungen hier mit einigen Proben hier.
FormData
Methode, die ich vorgeschlagen, dann wird PHP pickup die richtige Datei, und füllen Sie die$_FILES
array für Sie (und dann können Sie einfach anrufenmove_uploaded_file
).