[js] jak pobrać rozmiar pliku

[js] jak pobrać rozmiar pliku
zxc
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 72
0

Z tego co mi wiadmom to nie można z poziomu JavaScript dobrać się do rozmiaru jakiegoś pliku na dysku lokalnym. Może znacie jakieś sztuczki aby to zrobić?

Chodzi mi o to aby przed uploadowaniem pliku na server sprawdzić czy rozmiar wysyłanego pliku nie jest za duży (po co ktoś ma wysyłać 100 MB skoro server mu tego nie przyjmie)

Coldpeer
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Londyn
0

Możesz to zrobić językiem server-side, bo i nim wysyłasz plik na serwer. W JS tego nie osiągniesz.

Adamo
  • Rejestracja: dni
  • Ostatnio: dni
0

robiąc skrypt w perlu możesz zerwać połączenie zaraz po dostaniu nagłówka z rozmiarem pliku
możesz też dodać ukryte pole do formularza - nie pamiętam jak się ono nazywa i chociaż w praktyce nigdy nie wypróbowałem to teoretycznie przeglądarka nie powinna dopuścić do wysłania pliku przekraczającego rozmiar podany w tym parametrze

ciapek888
  • Rejestracja: dni
  • Ostatnio: dni
0

w php limit przesylanego pliku jest ustawiony w php.ini(zwykle 4MB) i nie prześle nigdy na serwer więcej danych

Adamo
  • Rejestracja: dni
  • Ostatnio: dni
0
ciapek888 napisał(a)

w php limit przesylanego pliku jest ustawiony w php.ini(zwykle 4MB) i nie prześle nigdy na serwer więcej danych

nie prześle ale będzie próbował więc o tym że nie prześle dowie się dopiero po kilkunastu minutach co może wkurzyć

zxc
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 72
0
Adamo napisał(a)

nie prześle ale będzie próbował więc o tym że nie prześle dowie się dopiero po kilkunastu minutach co może wkurzyć

No właśnie. A ja chciałbym tego uniknąć. Formularz odbiera strona PHP. Czy można szybko wykryć że użytkownik próbuje wepchnąć za duży plik i przerwać jego upload?

Adamo napisał(a)

robiąc skrypt w perlu możesz zerwać połączenie zaraz po dostaniu nagłówka z rozmiarem pliku

Czy da się to zrobć w PHP? W $_FILES nigdzie nie ma mowy o rozmiarze plik.

Coldpeer
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Londyn
0

No jak nie ma, jak jest.

Kopiuj
$_FILES['plik']['size']
ciapek888
  • Rejestracja: dni
  • Ostatnio: dni
0
Coldpeer napisał(a)

$_FILES['plik']['size']
No tak, tylko że w tablicy $_FILES cokolwiek pojawi się dopiero po przesłaniu całego pliku

Coldpeer
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Londyn
0

Tak? :> A np. takie coś to jak działa?

Kopiuj
// czy rozmiar pliku jest mniejszy od 2 kB
if($_FILES['plik']['size'] < 2048)
{
  move_uploaded_file(...); // dopiero przesyłamy plik
}
zxc
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 72
0

move_uploaded_file(...); // dopiero przesyłamy plik

W tym momencie plik już jest przesłany, tylko znajduje się w tempie pod tymczasową nazwą.
move_uploaded_file służy do przeniesienia tego pliku z temp'a do właściwego katalogu na serwerze

Coldpeer
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Londyn
0

Racja [wstyd] Zapomniałem o $_FILES[]['tmp_name'].

ciapek888
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie znam się, ale może jakiś applet javy byłby w stanie pobrać rozmiar pliku przed wysłaniem...

zxc
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 72
0
ciapek888 napisał(a)

Nie znam się, ale może jakiś applet javy byłby w stanie pobrać rozmiar pliku przed wysłaniem...

Aplet na pewno dałby radę ale wolę tego uniknąć. Niektórzy mogą mieć powyłączaną obsługę javy w przeglądarkach i wtedy zipa dumna ;-) !

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
0

Albo mogą nie mieć JVM. Jak niżej (wyżej?) podpisany. Aplet ActiveX też by mogł to zrobić tak nawiasem :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.