Hi,
Ich habe da mal wieder ein Problem, bei dem ich als Anfänger nicht weiterkomme.
Ich habe zwar schon ein bisschen gegoogelt, aber was ich gefunden habe, läuft immer wieder darauf hinaus, dass eine neue Seite geladen werden muss.
Also, ich möchte auf einer Platform in einem bestimmten Verzeichnis eine ZIP-Datei hinterlegen, die dann vom System später weiterverarbeitet wird. Hierfür habe ich das HTML Form-Element file gefunden. Die entsprechende Form auf der Webseite dazu sieht so aus:
[highlight=HTML]
<form action="classes/http_request/uploadFWZip.php" method="post" enctype="multipart/form-data" name="f">
<table border="0">
<tr >
<td valign="top"><id="FWfilename" input type="file" name="FWZipfile"><br><input id="btnUploadFWZip" type="button" value="<?php print Text::getText($page, 3) ?>" onClick="UploadFWZip()"></td>
<td valign="top"><input id="btnStartUpgrade" type="button" value="<?php print Text::getText($page, 4)?>" onclick="SendStartFWUpgrade()" disabled = true></td>
</tr>
</table>
</form>
[/highlight]
Die zugehörige JavaScript-Funktion so:
[highlight=JavaScript]
function UploadFWZip()
{
if(document.getElementById(elementId).value.length >0)
document.f.submit();
}
[/highlight]
Und das php-Skript so:
[highlight=php]
<?php
error_reporting(E_ALL);
if(isset($_FILES["FWZipfile"]))
{
if($_FILES["FWZipfile"]["error"] == UPLOAD_ERR_OK)
{
move_uploaded_file($_FILES["FWZipfile"]["tmp_name"], "/tmp/FW.zip");
echo "OK";
}
else
{
echo "err: upload error " . $_FILES["FWZipfile"]["error"];
}
}
else
{
echo "err: no files present.";
}
?>
[/highlight]
Insgesamt klappt das zwar (also die Datei wird übermittelt, entsprechende Prüfungen, dass der User da keinen Mist hochlädt, sind noch einzubauen) und landet auch unter neuem Namen im /tmp-Verzeichnis, aber die Rückgabe wird als neue Seite angezeigt. Stattdessen würde ich nun gerne den Upload als http-Request realisieren, dessen Antwort ("OK" oder Fehlermeldung) dann ausgewertet wird (entweder den StartUpgrade-Button aktivieren bzw. eine Rückmeldung bei Fehler). Mir fehlt aber der Ansatz, das ganze so zu einem http-Request umzustricken, dass ich um das form.submit() herumkomme, dass mir ja eine neue Datei lädt. Also irgendetwas in der Form:
[highlight=JavaScript]
function UploadFWZip()
{
var xmlhttp;
if(window.XMLHttpRequest)
xmlhttp=new XMLHttpRequest;
else
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState == 4)
{
var result = xmlhttp.responseText;
if(xmlhttp.status==200)
{
if(result =="OK")
{
alert("OK");
document.getElementById("btnStartUpgrade").disable d=false;
}
else
alert("<?php print Text::getText('PAGE_ERROR', 'err6')?>");
}
else
alert("<?php print Text::getText('PAGE_ERROR', 'err6')?>");
}
}
xmlhttp.open("POST", 'classes/http_request/uploadFWZip.php', true);
xmlhttp.setRequestHeader(????);
????
xmlhttp.send(????);
}
[/highlight]
Da es sich bei dem "Webserver" um einen Server auf einer embedded-Platform handelt, kann ich nicht Ajax-Framework oder ähnliches installieren, bin also auf php und JavaScript angewiesen.
Und kann man dem Form-Element file irgendwelche Filter mitgeben, dass von vorneherein nur ZIPs ausgewählt werden können?
Gruß
Martin
Ich habe da mal wieder ein Problem, bei dem ich als Anfänger nicht weiterkomme.
Ich habe zwar schon ein bisschen gegoogelt, aber was ich gefunden habe, läuft immer wieder darauf hinaus, dass eine neue Seite geladen werden muss.
Also, ich möchte auf einer Platform in einem bestimmten Verzeichnis eine ZIP-Datei hinterlegen, die dann vom System später weiterverarbeitet wird. Hierfür habe ich das HTML Form-Element file gefunden. Die entsprechende Form auf der Webseite dazu sieht so aus:
[highlight=HTML]
<form action="classes/http_request/uploadFWZip.php" method="post" enctype="multipart/form-data" name="f">
<table border="0">
<tr >
<td valign="top"><id="FWfilename" input type="file" name="FWZipfile"><br><input id="btnUploadFWZip" type="button" value="<?php print Text::getText($page, 3) ?>" onClick="UploadFWZip()"></td>
<td valign="top"><input id="btnStartUpgrade" type="button" value="<?php print Text::getText($page, 4)?>" onclick="SendStartFWUpgrade()" disabled = true></td>
</tr>
</table>
</form>
[/highlight]
Die zugehörige JavaScript-Funktion so:
[highlight=JavaScript]
function UploadFWZip()
{
if(document.getElementById(elementId).value.length >0)
document.f.submit();
}
[/highlight]
Und das php-Skript so:
[highlight=php]
<?php
error_reporting(E_ALL);
if(isset($_FILES["FWZipfile"]))
{
if($_FILES["FWZipfile"]["error"] == UPLOAD_ERR_OK)
{
move_uploaded_file($_FILES["FWZipfile"]["tmp_name"], "/tmp/FW.zip");
echo "OK";
}
else
{
echo "err: upload error " . $_FILES["FWZipfile"]["error"];
}
}
else
{
echo "err: no files present.";
}
?>
[/highlight]
Insgesamt klappt das zwar (also die Datei wird übermittelt, entsprechende Prüfungen, dass der User da keinen Mist hochlädt, sind noch einzubauen) und landet auch unter neuem Namen im /tmp-Verzeichnis, aber die Rückgabe wird als neue Seite angezeigt. Stattdessen würde ich nun gerne den Upload als http-Request realisieren, dessen Antwort ("OK" oder Fehlermeldung) dann ausgewertet wird (entweder den StartUpgrade-Button aktivieren bzw. eine Rückmeldung bei Fehler). Mir fehlt aber der Ansatz, das ganze so zu einem http-Request umzustricken, dass ich um das form.submit() herumkomme, dass mir ja eine neue Datei lädt. Also irgendetwas in der Form:
[highlight=JavaScript]
function UploadFWZip()
{
var xmlhttp;
if(window.XMLHttpRequest)
xmlhttp=new XMLHttpRequest;
else
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState == 4)
{
var result = xmlhttp.responseText;
if(xmlhttp.status==200)
{
if(result =="OK")
{
alert("OK");
document.getElementById("btnStartUpgrade").disable d=false;
}
else
alert("<?php print Text::getText('PAGE_ERROR', 'err6')?>");
}
else
alert("<?php print Text::getText('PAGE_ERROR', 'err6')?>");
}
}
xmlhttp.open("POST", 'classes/http_request/uploadFWZip.php', true);
xmlhttp.setRequestHeader(????);
????
xmlhttp.send(????);
}
[/highlight]
Da es sich bei dem "Webserver" um einen Server auf einer embedded-Platform handelt, kann ich nicht Ajax-Framework oder ähnliches installieren, bin also auf php und JavaScript angewiesen.
Und kann man dem Form-Element file irgendwelche Filter mitgeben, dass von vorneherein nur ZIPs ausgewählt werden können?
Gruß
Martin
Comment