Hallo liebes Forum,
ich arbeite immer noch an meinem FileUpload mit Ajax, jQuery und PHP.
Ich bin jetzt soweit, dass ich Daten vom Client an den Server übertragen kann.
Was leider nicht funktioniert, dass Daten von Clien- und Serverseite übereinstimmen.
Wie schon im Titel beschrieben, sind die Daten auf Serverseite größer.
Ich hab es bis jetzt immer mit einem Bild getestet:
Soll: 53.367 Byte
Ist: 79.034 Byte
Könnte das Problem am encoding liegen?
Mein Quellcode ist:
Client:
Hier hatte ich mit $.ajax() und $.post() experimentiert, aber bei beiden kommt das gleiche Ergebnis, die Daten sind auf dem Server zu groß.
Server:
Außerdem merkwürdig ist, dass die Daten nicht in $_FILES sind, sondern nur in $_POST. Laut handbuch, sollten FileUploads mit POST in $_FILES stehen.
Daher meine Frage: warum kommen die Daten nicht sauber auf der Serverseite an?
Danke schon im Voraus
rilight
ich arbeite immer noch an meinem FileUpload mit Ajax, jQuery und PHP.
Ich bin jetzt soweit, dass ich Daten vom Client an den Server übertragen kann.
Was leider nicht funktioniert, dass Daten von Clien- und Serverseite übereinstimmen.
Wie schon im Titel beschrieben, sind die Daten auf Serverseite größer.
Ich hab es bis jetzt immer mit einem Bild getestet:
Soll: 53.367 Byte
Ist: 79.034 Byte
Könnte das Problem am encoding liegen?
Mein Quellcode ist:
Client:
Hier hatte ich mit $.ajax() und $.post() experimentiert, aber bei beiden kommt das gleiche Ergebnis, die Daten sind auf dem Server zu groß.
HTML:
<!Doctype HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dateiupload mit Javascript</title>
<style type="text/css">
#output
{
width : 350px;
border : 1px dotted black;
padding : 10px;
margin-top : 25px;
}
</style>
</head>
<body>
<h2>Meine kleine Spielwiese</h2>
<form id="fileUpload" action="upload.php" method="POST">
<input type="file" name="dateien[]" id="uploadInput" multiple="multiple">
<input type="button" value="upload starten" id="uploadStart">
</form>
<div id="output"></div>
<!-- JavaScript Bereich -->
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script type="text/javascript">
$("document").ready(function() {
$("#uploadStart").click(function() {
// input auswaehlen
var dateien = $("#uploadInput")[0].files;
console.log(dateien);
// groesse feststellen
var groesse = dateien.length;
// jedes Element durchgehen
for(var i = 0, datei = dateien[i]; i < groesse; ++i)
{
var dateiName = datei.name;
var reader = new FileReader();
reader.onload = function()
{
console.log(reader);
console.log(reader.result.length);
//console.log(reader.result);
/*
$.ajax({
url : "upload.php",
type : "POST",
timeout : 5000,
processData : false, // data nicht in String konvertieren
data : {
"file_name" : dateiName,
"file" : this.result
},
headers : {
"enctype" : "multipart/form-data",
"encoding" : "multipart/form-data"
}
});
*/
$.post('upload.php', {
file_name : dateiName,
file : reader.result
}, function( data ) {
$("#output").append(data);
});
}
reader.readAsBinaryString(datei);
}
});
});
</script>
</body>
</html>
PHP:
<?php
if( isset($_FILES['file']) )
{
echo '$_File isset'."\n";
}
elseif( isset($_POST['file']) && isset($_POST['file_name']) )
{
$upload_dir = 'upload/';
$file_name = $_POST['file_name'];
$file = $_POST['file'];
$handle = fopen($upload_dir.$file, 'wb');
fwrite($handle, $file);
fclose($handle);
echo '$_POST isset'."\n";
echo 'strlen(file_name)'.strlen($_POST['file_name'])."\n";
echo 'strlen(file)'.strlen($_POST['file'])."\n";
echo 'strlen(urldecode(file))'.strlen(urldecode($_POST['file']))."\n";
}
else
{
echo 'nothing isset'."\n";
}
?>
Daher meine Frage: warum kommen die Daten nicht sauber auf der Serverseite an?
Danke schon im Voraus
rilight