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

StackOverflow https://stackoverflow.com/questions/1606842

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть функция загрузки файла на одной из страниц.Я проверяю расширение файла с помощью 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>
Это было полезно?

Решение

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

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

Другие советы

См. 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.

Теперь можно получить размер файла, используя чистый 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 );

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

 var fileSize = oFile.size;

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top