Ladda upp filer via Ajax och PHP

Permalänk

Ladda upp filer via Ajax och PHP

God kväll.

Jag sitter här och försöker få mitt Ajax-skript att kunna ladda upp filer via PHP, men tyvärr utan resultat. Väldigt förenklat ser koden ut så här:

Ajax:

var browsedFile = document.getElementById("pathFile"); ajaxRequest.open("POST","func.php",true); ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); ajaxRequest.send("postFile=" + browsedFile.value);

PHP:

echo $_FILES['postFile']['name'];

Jag vill alltså skicka över innehållet som finns pathFile (vanlig filväljare via HTML Form) till PHP-skriptet, men tyvärr så verkade som att det inte finns något innehåll i datan jag försöker skicka över eftersom att raden i PHP-skriptet returneras tom. Vad gör jag för fel och hur rekommenderar ni?

Tacksam för hjälp.

Permalänk
Medlem

I dagens läge går det inte att ladda upp filer med PHP via en POST request med hjälp av AJAX.

Har själv försökt och förståt att detta ej går.

Däremot får du använda dig av så kallade gömda iframes för att dölja vad du håller på med och skicka uppladdning till denna iframe och när upload är klar får du trigga ett javascript event som talar om för ditt övriga javascript att nu är upladdningen klar.

Vid lite snabb koll så ska den kommande nya "file API" kunna hjälpa till med uppladdning av filer:
https://developer.mozilla.org/en/DOM/File

Sök även på "file API + upload" på google.

Lycka Till.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem
Skrivet av svanbergjo:

God kväll.

Jag sitter här och försöker få mitt Ajax-skript att kunna ladda upp filer via PHP, men tyvärr utan resultat. Väldigt förenklat ser koden ut så här:

Ajax:

var browsedFile = document.getElementById("pathFile"); ajaxRequest.open("POST","func.php",true); ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); ajaxRequest.send("postFile=" + browsedFile.value);

PHP:

echo $_FILES['postFile']['name'];

Jag vill alltså skicka över innehållet som finns pathFile (vanlig filväljare via HTML Form) till PHP-skriptet, men tyvärr så verkade som att det inte finns något innehåll i datan jag försöker skicka över eftersom att raden i PHP-skriptet returneras tom. Vad gör jag för fel och hur rekommenderar ni?

Tacksam för hjälp.

Skrivet av BlueEyes:

I dagens läge går det inte att ladda upp filer med PHP via en POST request med hjälp av AJAX.

Har själv försökt och förståt att detta ej går.

Däremot får du använda dig av så kallade gömda iframes för att dölja vad du håller på med och skicka uppladdning till denna iframe och när upload är klar får du trigga ett javascript event som talar om för ditt övriga javascript att nu är upladdningen klar.

Vid lite snabb koll så ska den kommande nya "file API" kunna hjälpa till med uppladdning av filer:
https://developer.mozilla.org/en/DOM/File

Sök även på "file API + upload" på google.

Lycka Till.

Filuppladdningar är hårt styrda i browsers. Det går exempelvis inte att läsa av ett filuppladdningsfälts egenskaper eftersom att man då får tillgång till sökvägar på klientens dator.

Vad skulle hända om en browser tillät javascript detta? Om en linuxburk ansluter så är det ju busenkelt att sno alla viktiga filer passwd, shadow, sambainställningar, ftp, apache-conf osv.

Däremot ligger inte problemet eller lösningen i AJAX. Det blir komponenterna där man väljer filerna som kommer att ha säkerheten. Exempelvis med just "File API" så är det en vanlig <input> eller en Drag And Drop (DataTransfer).

I dagsläget så är det en vanlig input (en fil), iframe (en fil per iframe) eller Flash/Silverlight (flera filer) som gäller vid filuppladdning.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk

Då blev man lite klokare på det hela. Tack så mycket för er hjälp!

Permalänk
Medlem

Problemet i AJAX fallet med POST är att själva "data" som filen består av skickas inte med header informationen. Så det är där skon klämmer.

Förhoppningsvis ändras detta längre fram. Det vore smidigt.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.