Как я могу получить размер загрузки файла с помощью простого Javascript?

У меня есть функция загрузки файлов на одной из страниц. Я проверяю расширение файла с помощью JavaScript. Теперь я хочу ограничить пользователя загрузкой файла размером более 1 МБ. Есть ли способ проверить размер загрузки файла с помощью JavaScript.

Теперь мой код выглядит следующим образом:

<script language="JavaScript">
function validate() {
   var filename = document.getElementById("txtChooseFile").value;
   var ext = getExt(filename);
   if(ext == "txt" || ext == "csv")
      return true;
   alert("Please upload Text files only.");
   return false;
}

function getExt(filename) {
   var dot_pos = filename.lastIndexOf(".");
   if(dot_pos == -1)
      return "";
   return filename.substr(dot_pos+1).toLowerCase();
}
</script>

Ответ 1

Другое, что при поиске имени файла вам не удастся узнать какие-либо другие подробности о файле в javascript, включая его размер.

Вместо этого вы должны настроить серверную часть script для блокировки негабаритной загрузки.

Ответ 2

См. http://www.w3.org/TR/FileAPI/. Он поддерживается Firefox 3.6; Я не знаю ни о каких других браузерах.

Внутри onchange события <input id="fileInput" type="file" /> просто:

var fi = document.getElementById('fileInput');
alert(fi.files[0].size); // maybe fileSize, I forget

Вы также можете вернуть содержимое файла в виде строки и так далее. Но опять же, это может работать только с Firefox 3.6.

Ответ 3

Теперь можно получить размер файла, используя чистый JavaScript. Почти вся поддержка браузера FileReader, которую вы можете использовать для чтения размера файла, а также вы можете показывать изображение без загрузки файла на сервер. ссылка

код:

    var oFile = document.getElementById("file-input").files[0]; // input box with type file;
    var img = document.getElementById("imgtag");
    var reader = new FileReader();
    reader.onload = function (e) {
            console.log(e.total); // file size 
            img.src =  e.target.result; // putting file in dom without server upload.

   };
   reader.readAsDataURL(oFile );

Вы можете получить размер файла непосредственно из файла с помощью следующего кода.

 var fileSize = oFile.size;

Ответ 4

Большинство из этих ответов являются устаревшими. В настоящее время можно определить размер файла на стороне клиента в любом браузере, который поддерживает API файлов. Это включает, в основном, все браузеры, отличные от IE9 и старше.

Ответ 5

Возможно, это будет возможно с использованием большого количества кода, специфичного для браузера. Взгляните на источник TiddlyWiki, которому удается сохранить себя на жестком диске пользователя, подключившись к Windows Scripting Host (IE), XPCOM (Mozilla) и т.д.

Ответ 6

Я не думаю, что есть какой-либо способ сделать это с помощью простого JS с веб-страницы.
Возможно, с расширением браузера, но с страницы javascript не может получить доступ к файловой системе по соображениям безопасности.

Flash и Java должны иметь схожие ограничения, но, возможно, они немного менее строгие.

Ответ 7

невозможно. будет серьезной проблемой безопасности, позволяющей запускать скрипты на стороне клиента, которые могут читать информацию о файле с жесткого диска и конечных пользователей.

Ответ 8

Смотрите здесь:

http://www.kavoir.com/2009/01/check-for-file-size-with-javascript-before-uploading.html

Как и все люди, говорящие, что это должно быть сделано на стороне сервера, они абсолютно спотыкаются на это.

В моем случае, хотя максимальный размер будет за исключением 128 МБ, если пользователь пытается загрузить что-то, что составляет 130 МБ, им не нужно ждать 5 минутного времени загрузки, чтобы узнать, что он слишком большой, поэтому мне нужно сделать дополнительную проверку перед отправкой страницы для удобства использования.