Ich habe meinen Code vereinfacht eine Datei ohne iFrame oder Flash-Engine für das Hochladen, und ich kam zu dieser Ajax-Funktion auf:ajax php-Datei-Upload ohne iFrame oder Flash-Motor
<input type="file" name="uploadfile" id="myfile" /><label for="file" id="progress"></label>
<script src="js/jquery-1.7.1.min.js"></script>
<script>
function uploadFile(files) {
var xmlhttp;
if(window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.upload.onprogress = function(e) {
$("#progress").empty().append(e.loaded + " - " + e.total);
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText + "DONE!");
}
}
xmlhttp.open("post", "post.php", true);
xmlhttp.setRequestHeader("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT");
xmlhttp.setRequestHeader("Cache-Control", "no-cache");
xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xmlhttp.setRequestHeader("X-File-Name", files[0].fileName);
xmlhttp.setRequestHeader("Content-Type", "multipart/form-data");
xmlhttp.send(files[0]);
}
$(document).ready(function() {
$("#myfile").change(function() {
uploadFile(this.files);
});
});
</script>
Dies ist der PHP-Code die Erwiderung auf die ajax-Funktion:
<?php
if(isset(
$_SERVER['CONTENT_TYPE'],
$_SERVER['CONTENT_LENGTH'],
$_SERVER['HTTP_X_FILE_NAME']
) &&
$_SERVER['CONTENT_TYPE'] == 'multipart/form-data'){
$file->name = basename($_SERVER['HTTP_X_FILE_NAME']);
$input = fopen('php://input', 'rb');
$file = fopen('files/'.$file->name, 'wb');
stream_copy_to_stream($input, $file);
fclose($input);
fclose($file);
} else {
echo "Error";
}
?>
Das Problem ist, manchmal funktioniert es manchmal Fehler, während versuchen, die gleiche Datei zu. Ich hoffe, es gibt eine Lösung, um dieses Problem zu beheben. Der Code ist einfach, wenn ich eine Datei mit Eingabedateityp auswähle, wird die uploadFile-Funktion ausgeführt. Wenn es kaputt geht, kann ich sehen, dass die Datei hochgeladen wird, aber es hat nicht die Originalgröße, also könnte es irgendwo Fehler machen und den Upload stoppen.
Vielen Dank im Voraus, Daniel!
Es ist nur, dass es in den meisten Browsern in dem Sinne gebrochen ist, dass es nicht wirklich solide funktioniert. Sie sollten sich an Ihren Browser-Anbieter wenden und besprechen, wie Sie Ihr Problem beheben können. – hakre
gut das Problem ist, dass es funktioniert aber nur manchmal, auf kleinen Dateien funktioniert es immer .. aber auf Dateien mehr als 500 kb ~ es funktioniert nur manchmal, manchmal stoppt es aus irgendeinem Grund und laden Sie nur ein Stück der Datei –
Sind Sie einen Fehler bekommen, wenn es nicht funktioniert? – jreed121