Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax] Dynamiczny upload plików
Forum PHP.pl > Forum > XML, AJAX > AJAX
Astarot
Witam, mam problem z napisaniem dynamicznego uploadera plików.
Używam klasy AdvancedAJAX 1.1

Plik z formularzem(example.php):

Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" xml:lang="pl">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Dynamiczny upload By Astarot</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="advajax.js"></script>
    <script type="text/javascript" src="funkcje.js"></script>
</head>
<body>
<form method="post" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
      <input type="file" name="pliczek" size="30" />
      <button  onclick="upload()">Zapisz</button>
</form>
</body>
</html>


Plik z funkcją odpowiedzialna za przeslanie zmiennych(funkcje.js):

Kod
function upload()
{

advAJAX.post({
    url: "upload.php",
    onLoading : function(obj) {  alert('laduje'); },
    onComplete : function(obj) { alert('zaladowalem'); },
    onSuccess : function(obj) { alert('mam dane'); }
});
}


oraz pliczek upload.php:

Kod
<?php
move_uploaded_file($_FILES['pliczek']['tmp_name'],"pliki/".$_FILES['pliczek']['name']);
?>

Taki błąd generuje konsola JS w mozilli firefox


obrazek TUTAJ
Licze na waszą pomoc winksmiley.jpg
pozdr. Astarot
mariuszn3
Nie uploadujesz pliku ajaxem.. gdyby to było możliwe byłaby to poważna luka w bezpieczenstwie.. a nawet nie luka.. a wieeelka dziura ;-)
Jesli piszesz skrypt wyłącznie na własne potrzeby, możesz poprzez edycje pliku konfiguracyjnego firefoxa sobie to umożliwić.
Astarot
Hmm... dlaczego powstala by luka ? przeciez w pliku upload.php mozna zrobic
filtrowanie rozszezen tylko na jpg.. i wtedy inne pliki nie bylyby uploadowane.

Szukajac przykladowych uploaderow w ajaxie na google, udalo mi sie kilka znaleść.
Niestety wszystkie były płatne ok 30$. Dlatego zakładam że upload w ajaxie jest
możliwy.

Pozdr. Astarot
hawk
Kiepsko szukałeś. Np. http://www.captain.at/ajax-file-upload.php.

A twój przykład niestety w ogóle nie uploaduje plików. Tak to możesz co najwyżej wysłaś nazwę pliku. Najpierw trzeba plik odczytać z dysku. Normalnie przeglądarka robi to automagicznie dla input type="file", ale ty nie wysyłasz formularza, więc musisz zrobić to sam. A grzebanie javascriptem po dysku nie należy do bezpiecznych operacji.
anopak
@hawk - to rozwiązania działa tylko pod FF... miałem podobny problem i poszedłem w stronę ukrytej ramki, do której jest wysyłany formularz...
mariuszn3
Cytat(Astarot @ 2006-04-01 11:30:49)
Hmm... dlaczego powstala by luka ? przeciez w pliku upload.php mozna zrobic
filtrowanie rozszezen tylko na jpg.. i wtedy inne pliki nie bylyby uploadowane.

Dlaczego? Dane wpisane przez użytkownika w formularz przechodzą przez napisany przez Ciebie javascript.. Jeśli chcesz możesz je jak Ci się podoba edytywać zanim dotrą na serwer.. Gdyby ta możliwość była zachowana przy przesyłaniu plików to by oznaczało, że możesz bez wiedzy użytkownika wybrać sobie dowolny inny plik z jego komputera.. to nazywam poważną luką, której oczywiście nie ma.
Hawk Ci podał link, gdzie jest opisane jak odbezpieczyć tę lukę w firefoxie.. i to jest jedyna znana mi możliwość jak to zrobić ajaxem.. Każde tzw inne możliwości to właśnie ukryta ramka... a to z ajaxem nie ma nic wspólnego.
eXtreme
http://www.raditha.com/megaupload/

JS+php+PERL (ale bez ajaxa), z progress barem itp.
kukix
Napiszcie coświęcej na temat tej ukrytej ramki...

Przygoitowuje galerie zdjęć opartą na AJAX'ie (wszczytywanie listy plików, kategorie, zapisywanie opisów itp..) Wiem już, że za pomocą AJAX'a nie da sie zrobić uploadu plików pod IE...

Jak miałby wyglądać ten upload z ukrytą ramką.. napiszczie coświęcej... sad.gif
a79rtur
widze ze nie tylko ja spotkalem sie z tym bledem
tez cos takiego pojawilo mi sie w konsoli js ale w innej sytuacji, TUTAJ opisanej. moze ktos wie co ten komunikat oznacza ?
L00zak
Myślę, że wszyscy tego szukali: biggrin.gif
http://uber-uploader.sourceforge.net
polecam, świetnie zrobiony uploader na ajaxie, bez odświeżania strony itp

pozdrawiam
mariuszn3
Ten uploader nie ma nic wspólnego z ajaxem. Jego główny atut to progress bar, który jest serwowany za pomocą dodatkowej ramki.
aq404
Na AJAXie oparty jest w2box - http://labs.beffa.org/w2box/
mariuszn3
Trochę pośpieszyłem się z poprzednią odpowiedzią (2 posty wyżej). Uber-uploader ma w opcji wspomaganie przez ajax (progress bar). I to obok tego w2box'a chyba najlepsze rozwiązania jakie są korzystając z html+javascript.

Nie mniej rozwiązania korzystające po stronie klienta z html+javascript nie są w stanie przeskoczyć jednego ograniczenia. W html'u dodając pliki do przekazania na serwer możemy je dodawać tylko pojedyńczo. Może to być bardzo uciążliwe jeśli chcemy przesłać na przykład kilkadziesiąt plików (każdy z nich musimy dodawać do formularza osobno).

Okazuje się jednak, że i na to jest rada. Ostatnia wersja Flash (8.0) ma wbudowaną funkcjonalność przesyłania plików od użytkownika na serwer i można zastosować taką wersję okienka przeglądania zawartości dysku, która pozwala wybierać nie ograniczoną ilość plików -> Demo

No i to chyba wszystko czego trzeba aby stworzyć w pełni satysfakcjonujący uploader plików smile.gif
Ajax może jedynie przysłużyć się w aktualizowaniu progress bar'u w rozwiązaniach html+js
anopak
przy opcji z flashem problem jest już sam w sobie... flash, na którego na dodatek ostatnio windows w IE dodał pewne ograniczenia...

do rozwiązania w2box jest jedno ale... musi działać łącznie z perlem, a nie każdy hosting to obsługuje...


Mimo to w2box jest chyba poprostu świetny... w przypadku gdy nie mamy perla, pozostaje nam poprostu iframe...
mariuszn3
[quote name='anopak' date='26.05.2006, 17:46 ' post='260639']
przy opcji z flashem problem jest już sam w sobie... flash, na którego na dodatek ostatnio windows w IE dodał pewne ograniczenia...[/quote]
No to jest oczywiste.. ale chodzi o to, że nie ma na to alternatywy, Chcesz mieć uploader, w którym będziesz miał progress bar i możliwośc łatwego wgrywania dużej ilości pliku. Tylko Flash to potrafi.
Akurat w tym przypadku też bym się nie brał pod uwagę IE i inne przeglądarkowe różnice.
Możliwość wgrywania plików na serwer nie jest charakterystyczną częścią funkcjonalności zwykłej strony internetowej ale bardziej aplikacji o wyższym poziomie interakcji z użytkownikiem, spersonalizowanej aplikacji.
Jeśli użytkownik decyduje się na korzystanie z tego typu aplikacji to aby mógł korzystać z bardziej wyszukanych rozwiązań uważam, że jest zupełnie fair zawęzić pole obsługiwanych wyszukiwarek (i tak przecież szeroko dostępnych i darmowych), w tym momencie mamy pełne prawo aby też wymagać odpowiedniego oprogramowania od użytkownika.

[quote name='anopak' date='26.05.2006, 17:46 ' post='260639']
do rozwiązania w2box jest jedno ale... musi działać łącznie z perlem, a nie każdy hosting to obsługuje...
Mimo to w2box jest chyba poprostu świetny... w przypadku gdy nie mamy perla, pozostaje nam poprostu iframe...
[/qoute]

W tym momencie wracasz do punktu wyjścia.. Cały ten post rozbija się o to, jak stworzyć funkcjonalny szybki uploader plików za pomocą dostępnych technologii, inny od większości rozwiązań obecnych w seci. Rezygnując z flasha i perla znowu dajesz użytkownikowi uploader, który co najwyżej nadaje się do wgrywanie pojedyńczych nie dużych plików, czyli po prostu html'owy standard.
Zwróć uwagę, że nie jesteś w stanie podać paska progresu tylko za pomocą html+js +php.. do tego właśnie potrzebny jest perl.

P.S. Niech admini poprawią cytowanie w forum.. już nie mam siły zgadywać czemu [quote] [/quote] raz działa a raz nie działa
anopak
Cytat(mariuszn3)
Akurat w tym przypadku też bym się nie brał pod uwagę IE


chodzi o to, że aktualnie aby uaktywnić flasha w IE trzeba go kliknąć (wymogi patentu...)


Cytat(mariuszn3)
(...)html+js +php.. do tego właśnie potrzebny jest perl.


i tu się mylisz... za pomocą php i js dasz radę stworzyć nawet pasek postępu... odpowiedni moduł do apache... co do ilości plików przesyłanych naraz, też jest na to sposób...
mariuszn3
Cytat(anopak @ 27.05.2006, 16:21 ) *
chodzi o to, że aktualnie aby uaktywnić flasha w IE trzeba go kliknąć (wymogi patentu...)


To wie każdy kto pracuje przy stronach, jednak nie za bardzo rozumiem jak to się ma do tego o czym pisałem.

Cytat(anopak @ 27.05.2006, 16:21 ) *
i tu się mylisz... za pomocą php i js dasz radę stworzyć nawet pasek postępu... odpowiedni moduł do apache...


Czyli da się za pomocą apache+php sprawdzać postęp ściągania pliku od klienta (?) Będę wdzięczny za jakiś link

Cytat(anopak @ 27.05.2006, 16:21 ) *
co do ilości plików przesyłanych naraz, też jest na to sposób...


Nie wiem czy uważnie przeczytałeś o czym pisałem... to, że się da przesłać wiele plików na raz za pomocą jednego formularza jest oczywiste..problem w tym, że każdy z nich trzeba dodawać do formularza osobno i to jest uciążliwe, z tego co wiem nie ma na to rozwiązania poprzez html+js.
anopak
Cytat(mariuszn3)
Czyli da się za pomocą apache+php sprawdzać postęp ściągania pliku od klienta (?) Będę wdzięczny za jakiś link


proszę bardzo:
google
2 pierwsze wyniki...
akubiczek
No tak, ale bez patchowania oprogramowania na serwerze się nie obejdzie. A to nie zawsze da się zrobić.
kula1981
Witam

Tutaj mam jedno rozwiązanie
upload-plikow-flex-flash-ajax

Stary post ale temat ciągle aktualny i poszukiwany smile.gif

Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.