Czy jest jakiś sposób, aby sprawdzić rozmiar pliku przed przesłaniem go za pomocą JavaScript?
Czy jest jakiś sposób, aby sprawdzić rozmiar pliku przed przesłaniem go za pomocą JavaScript?
Tak , nowa funkcja W3C jest obsługiwana przez niektóre nowoczesne przeglądarki, File API . Można go w tym celu wykorzystać i łatwo jest sprawdzić, czy jest obsługiwany, i w razie potrzeby wrócić do innego mechanizmu, jeśli nie jest.
Oto kompletny przykład:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Data</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function showFileSize() {
var input, file;
// (Can't use `typeof FileReader === "function"` because apparently
// it comes back as "object" on some browsers. So just see if it's there
// at all.)
if (!window.FileReader) {
bodyAppend("p", "The file API isn't supported on this browser yet.");
return;
}
input = document.getElementById('fileinput');
if (!input) {
bodyAppend("p", "Um, couldn't find the fileinput element.");
}
else if (!input.files) {
bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs.");
}
else if (!input.files[0]) {
bodyAppend("p", "Please select a file before clicking 'Load'");
}
else {
file = input.files[0];
bodyAppend("p", "File " + file.name + " is " + file.size + " bytes in size");
}
}
function bodyAppend(tagName, innerHTML) {
var elm;
elm = document.createElement(tagName);
elm.innerHTML = innerHTML;
document.body.appendChild(elm);
}
</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='showFileSize();'>
</form>
</body>
</html>
I tutaj jest w akcji. Wypróbuj to w najnowszej wersji Chrome lub Firefox.
Nie na temat, ale: Zwróć uwagę, że sprawdzanie poprawności po stronie klienta nie zastępuje sprawdzania poprawności po stronie serwera. Sprawdzanie poprawności po stronie klienta służy wyłącznie zapewnieniu lepszej obsługi. Na przykład, jeśli nie zezwalasz na przesyłanie pliku większego niż 5 MB, możesz użyć weryfikacji po stronie klienta, aby sprawdzić, czy plik wybrany przez użytkownika nie ma więcej niż 5 MB i przekazać mu miłą, przyjazną wiadomość, jeśli jest (więc nie spędzają całego czasu na przesyłaniu tylko po to, aby wynik został wyrzucony na serwer), ale należy również egzekwować ten limit na serwerze, ponieważ można ograniczyć wszystkie limity po stronie klienta (i inne walidacje).
Za pomocą jquery:
źródło
MiB
jeśli obliczasz do podstawy1024
.Działa dla dynamicznego i statycznego elementu pliku
Rozwiązanie tylko dla Javascript
źródło
size
właściwości$(obj).files[0].size/1024/1024;
Ale zmieniłem to naobj.files[0].size/1024/1024;
NieTak, używając interfejsu API plików w nowszych przeglądarkach. Szczegółowe informacje można znaleźć w odpowiedzi TJ.Jeśli potrzebujesz również obsługiwać starsze przeglądarki, musisz użyć do tego celu programu do przesyłania plików Flash, takiego jak SWFUpload lub Uploadify .
SWFUpload Funkcje Demo pokazuje, jak
file_size_limit
działa ustawienie.Pamiętaj, że to (oczywiście) wymaga Flasha, a sposób jego działania różni się nieco od zwykłych formularzy przesyłania.
źródło
To całkiem proste.
źródło
Jeśli używasz jQuery Validation, możesz napisać coś takiego:
źródło
Zrobiłem coś takiego:
źródło
Używam jednej głównej funkcji Javascript, którą znalazłem na stronie Mozilla Developer Network https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications , wraz z inną funkcją AJAX i zmieniłem ją zgodnie z moimi potrzebami. Otrzymuje identyfikator elementu dokumentu dotyczący miejsca w moim kodzie HTML, w którym chcę zapisać rozmiar pliku.
Twoje zdrowie
źródło
Mimo odpowiedzi na pytanie chciałem opublikować swoją odpowiedź. Może się przydać przyszłym użytkownikom. Możesz użyć go jak w poniższym kodzie.
źródło
Przykład JQuery podany w tym wątku był bardzo nieaktualny, a Google nie był w ogóle pomocny, więc oto moja wersja:
źródło
Możesz wypróbować ten fineuploader
Działa dobrze pod IE6 (i nowszymi), Chrome lub Firefox
źródło
Jeśli ustawisz Ie „Tryb dokumentu” na „Standardy”, możesz użyć prostej metody „size” javascript, aby uzyskać rozmiar przesyłanego pliku.
Ustaw Ie „Tryb dokumentu” na „Standardy”:
Następnie użyj metody javascript „rozmiar”, aby uzyskać rozmiar przesłanego pliku:
Mi to pasuje.
źródło