Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]Upload plików bez przycisku submit
Forum PHP.pl > Forum > Przedszkole
Randallmaster
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?
Randallmaster
Mógłbyś mi opisać poszczególne linijki ponieważ nie wszystkie linijki rozumiem. Która odpowiada za upload?
pedro84
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?
Randallmaster
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);
nospor
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.
Randallmaster
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. });
nospor
A skad wytrzasnales this.files?
Randallmaster
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
nospor
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?
Randallmaster
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
nospor
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?
Randallmaster
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
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.