Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][PHP]Upload plików bez przycisku submit
Randallmaster
post
Post #1





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Witam,

Plik mogę upload'ować poprzez formularz i przycisk submit, wtedy jest tworzony tmp. Ale mam 2 pytania:

1. Czy można uploadować plik przesyłając odpowiednie dane za pomocą ajaxa? Dokładnie. Jak dodać plik do tmp bez użycia formularza i przycisku submit za pomocą ajaxa?

2. Jak dodać input type="file" z wybranym już plikiem. Czyli jak dokładnie powinien wyglądać input ze ścieżką do pliku na komputerze?
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


http://stackoverflow.com/questions/2320069...jax-file-upload
Go to the top of the page
+Quote Post
Randallmaster
post
Post #3





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Mógłbyś mi opisać poszczególne linijki ponieważ nie wszystkie linijki rozumiem. Która odpowiada za upload?
Go to the top of the page
+Quote Post
pedro84
post
Post #4





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


Cytat(Randallmaster @ 17.08.2014, 23:00:51 ) *
Mógłbyś mi opisać poszczególne linijki ponieważ nie wszystkie linijki rozumiem. Która odpowiada za upload?

Zaskoczę Cię pewnie, ale linijki... czego?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
Randallmaster
post
Post #5





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Cytat(pedro84 @ 18.08.2014, 01:41:23 ) *
Zaskoczę Cię pewnie, ale linijki... czego?


Linijki z odpowiedzi Tursona, które odpowiedzialne są za taki upload o którym wspomniałem w temacie.


W jaki sposób mogę wykonać prosty upload plików? Jeżeli klikam w przycisk submit upload się wykonuje i zwraca mi tablice. Natomiast ajax nie działa (zwraca pustą tablicę). Gdzie robię błąd?

  1. pobierz, plaintext
  2. <form action="/upload" enctype="multipart/form-data" id="UploadTestForm" method="post" accept-charset="utf-8">
  3. <input type="file" class="file-upload" name="data[Upload][file][]" accept="image/*" multiple="" />
  4. <input type="submit" value="Submit" class="">
  5. </form>


ajax:
  1.  
  2. $(".file-upload").on('change', function(){
  3. $.ajax({
  4. type:'POST',
  5. url:"/files/test/",
  6. data:$("#UploadTestForm").serialize(),
  7. success:function(data) {
  8.  
  9. console.log(data)
  10. }
  11. });
  12.  
  13. });
  14.  

/files/test/:
  1.  
  2. var_dump($this->data);
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W linku Tursona masz napisane czemu to ci nie dziala....
Zwyklym AJAXem plikow nie wyslesz. Musisz uzyc chocby FORMDATA. To wszystko masz w tamtym linku wraz z kodami.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Randallmaster
post
Post #7





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Użyłem form data jak w przykładzie i ciągle nic:

wynik z consoli:

FormData {append: function}
__proto__: FormData

  1. var formData = new FormData();
  2. formData.append('file', this.files[0]);
  3.  
  4. $.ajax({
  5. type:'POST',
  6. url:"/files/test/",
  7. data:formData,
  8. processData: false,
  9. contentType: false,
  10. success:function(data) {
  11. console.log(data)
  12. }
  13.  
  14. });


Ten post edytował Randallmaster 18.08.2014, 11:15:35
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A skad wytrzasnales this.files?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Randallmaster
post
Post #9





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


W poście 5 opisałem:

  1. <input type="file" class="file-upload" name="data[Upload][file][]" accept="image/*" multiple="" />


  1. $(".file-upload").on('change', function(){
  2. //ajax
  3. });


odpowiedź z konsoli ( console.log(this.files[0]) ):

  1. File {webkitRelativePath: "", lastModifiedDate: Thu Jul 17 2014 13:48:03 GMT+0200 (Środkowoeuropejski czas letni), name: "Scan003.jpg", type: "image/jpeg", size: 792511}
  2. lastModifiedDate: Thu Jul 17 2014 13:48:03 GMT+0200 (Środkowoeuropejski czas letni)
  3. name: "Scan003.jpg"
  4. size: 792511
  5. type: "image/jpeg"
  6. webkitRelativePath: ""
  7. __proto__: File
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra....

A czy tu
url:"/files/test/",
nie powinien byc przypadkiem adres do skryptu php?
No i patrzyles w ogole co dostaje ten skrypt?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Randallmaster
post
Post #11





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Inne skrypty z ajaxem działają więc url jest na 100% poprawny,

dane z POST odbieram za pomocą $this->data

/files/test/ zrobiłem widok

var_dump($this->data); żeby zobaczyć wynik, ale ciągle dostaje array(0) { }

w ajaxie mam odpowiedź console.log(data)

Cytat
No i patrzyles w ogole co dostaje ten skrypt?


Przyznaje się nie wiem jak to sprawdzić sad.gif zawsze za pomocą zwrotnej informacji odczytywałem co dostaje, a w przypadku pliku informacji zwrotnej brak

Ten post edytował Randallmaster 18.08.2014, 11:40:12
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
dane z POST odbieram za pomocą $this->data

a te $this->data to jak budujesz? Wiesz ze plikow masz szukac w tablicy $_FILES? Patrzyles tam w ogole?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Randallmaster
post
Post #13





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


za pomocą frameworka cakephp (ale wydaje mi się że to nie powinno być problemem).

Jeżeli robie taki sam zapis za pomocą przycisku submit bez ajaxa i przekierowywuje mnie na strone /files/test/ to otrzymuje wynik z var_dump:

  1. array(1) { ["Upload"]=> array(1) { ["file"]=> array(1) { [0]=> array(5) { ["name"]=> string(10) "asdasd.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/php1zeop8" ["error"]=> int(0) ["size"]=> int(68463) } } } }


za pomocą ajaxa
  1. array(0) { }


PROBLEM ROZWIĄZANY :/

Pliki po stronie widoku były pod $_FILES.
Dziękuje nospor

Ten post edytował Randallmaster 18.08.2014, 11:50:37
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:49