Zadaj pytanie
Subskrybuj kanał RSSnajnowszych pytań
Mam formularz w którym wybieram sobie plik do wysłania na serwer. Chciałbym ten plik sprawdzić przed wysłaniem, czy nie jest większy niż 2MB, oraz czy jego rozszerzenie jest dopuszczalne.
Jak to zrobić?
2 lata, 3 miesiące temu | edytowane przez: lqc 3965112
Odpowiedz na pytanie
0
2 lata, 3 miesiące temu autor: lqc
1
Po pierwsze, skoro ma to być przed wysłaniem pliku, to nie wiem co tu robi tag ROR. Można napisać skrypt JS, który po zmianie pliku/wysłaniu sprawdzi nazwę i rozmiar. Kontrolki typu 'file' mają atrybut files, który jest tablicą wybranych plików. Każdy z nich ma dwa atrybuty fileName i fileSize (przynajmniej w FF i Webkit, nie wiem jak w IE). Przykład <html> <head><title>File Test</title></head> <body> <form action="#" method="POST"> Plik: <input type="file" name="file" id="plik"></input> <input type="submit"> </form> <script type="text/javascript"> var fileInput = document.getElementById("plik"); fileInput.onchange = function() { // IE oczywiście nie ma takich bajerów, pewnie jakiś ActiveX musi być if(!this.files) { // ale samą nazwę możemy sprawdzić używając value if(! this.value.match(/.+\.jpg/i)) { alert("Musisz wybrać plik z rozszerzeniem jpg"); } return true; } if(this.files.length != 1) { alert("Musisz zaznaczyć dokładnie 1 plik"); this.value = ""; return false; } var name = this.files[0].fileName; var size = this.files[0].fileSize; if(! name.match(/.+\.jpg/i)) { alert("Musisz wybrać plik z rozszerzeniem jpg"); this.value = ""; return false; } if(size > 200) { alert("Plik musi mieć mniej niż 200 bajtów"); this.value = ""; return false; } return true; } </script> </body> </html> Oczywiście alert() należy zastąpić czymś mądrzejszym odpowiednim dla twojej strony. Ogólnie, to na pewno jest jakiś plugin do np. jQuery, który to robi, trzeba tylko poszukać.
Po pierwsze, skoro ma to być przed wysłaniem pliku, to nie wiem co tu robi tag ROR. Można napisać skrypt JS, który po zmianie pliku/wysłaniu sprawdzi nazwę i rozmiar.
Kontrolki typu 'file' mają atrybut files, który jest tablicą wybranych plików. Każdy z nich ma dwa atrybuty fileName i fileSize (przynajmniej w FF i Webkit, nie wiem jak w IE).
files
<html> <head><title>File Test</title></head> <body> <form action="#" method="POST"> Plik: <input type="file" name="file" id="plik"></input> <input type="submit"> </form> <script type="text/javascript"> var fileInput = document.getElementById("plik"); fileInput.onchange = function() { // IE oczywiście nie ma takich bajerów, pewnie jakiś ActiveX musi być if(!this.files) { // ale samą nazwę możemy sprawdzić używając value if(! this.value.match(/.+\.jpg/i)) { alert("Musisz wybrać plik z rozszerzeniem jpg"); } return true; } if(this.files.length != 1) { alert("Musisz zaznaczyć dokładnie 1 plik"); this.value = ""; return false; } var name = this.files[0].fileName; var size = this.files[0].fileSize; if(! name.match(/.+\.jpg/i)) { alert("Musisz wybrać plik z rozszerzeniem jpg"); this.value = ""; return false; } if(size > 200) { alert("Plik musi mieć mniej niż 200 bajtów"); this.value = ""; return false; } return true; } </script> </body> </html>
Oczywiście alert() należy zastąpić czymś mądrzejszym odpowiednim dla twojej strony.
Ogólnie, to na pewno jest jakiś plugin do np. jQuery, który to robi, trzeba tylko poszukać.
2 lata, 3 miesiące temu autor: fastred
Na początek zobacz dwa sprawdzone pluginy: attachment_fu paperclip Wydaje mi się, że ich funkcjonalność się usatysfakcjonuje. Z kolei jeżeli chcesz to zrobić samodzielnie to zapoznaj się z API helpera file field tag: APIdock Możesz określić jakie MIME będą akceptowane, natomiast rozmiar pliku będziesz musiał sprawdzić samodzielnie po otrzymaniu wysłanego formularza(jeśli programujesz RESTowo to akcje create, update).
Na początek zobacz dwa sprawdzone pluginy:
attachment_fu
paperclip
Wydaje mi się, że ich funkcjonalność się usatysfakcjonuje. Z kolei jeżeli chcesz to zrobić samodzielnie to zapoznaj się z API helpera file field tag: APIdock
Możesz określić jakie MIME będą akceptowane, natomiast rozmiar pliku będziesz musiał sprawdzić samodzielnie po otrzymaniu wysłanego formularza(jeśli programujesz RESTowo to akcje create, update).
2 lata, 3 miesiące temu autor: mrbox
Musisz szukać czegoś związanego z JavaScriptem. Ale generalnie chodzi mi o coś innego- po wysłaniu pliku, musisz go i tak sprawdzać na serwerze- z założenia, wszelkie dane pochodzące od usera są potencjalnie niebezpieczne, można 'w locie' podmienić wszystko co jest wysyłane do serwera, już po sprawdzeniu przez JS.
Musisz szukać czegoś związanego z JavaScriptem.
Ale generalnie chodzi mi o coś innego- po wysłaniu pliku, musisz go i tak sprawdzać na serwerze- z założenia, wszelkie dane pochodzące od usera są potencjalnie niebezpieczne, można 'w locie' podmienić wszystko co jest wysyłane do serwera, już po sprawdzeniu przez JS.
2 lata, 3 miesiące temu autor: bigzbig
Nie odczytasz przy pomocy JS wielkości pliku (zob), ani też mime. Jeśli chcesz uzyskać wiarygodne informacje o pliku niestety zawsze musisz wysłać go na serwer. Możesz to zrobić przy pomocy ajaxa bez przeładowania strony.
Zaloguj się, aby dodać swoją odpowiedź
93411130
powrót do góry
Copyright © 9fingers.pl Webdesign: TonikStudio.pl