Как узнать размер изображения для загрузки с помощью JavaScript? - PullRequest
1 голос
/ 11 ноября 2010

На моем сайте есть веб-страница, где пользователь может загружать фотографии. Я хочу установить лимит изображений для загрузки до 2 МБ. В настоящее время он загружает изображение всех размеров. Если изображение меньше 2 МБ, оно будет идти по обычному пути и загружаться, а если оно больше 2 МБ, всплывающее окно должно показывать сообщение об ошибке. Кто-нибудь может мне помочь, как сделать это только с помощью javascript? Любая помощь будет оценена. Спасибо!

1 Ответ

5 голосов
/ 11 ноября 2010

Вы можете использовать новый Файловый API (да, действительно) в браузерах, которые его поддерживают, а это в основном все, кроме IE9 и более ранних .Подобные вещи также возможны через Flash в браузерах, в которых установлена ​​Flash, поэтому вы можете иметь каскад проверок ( Поддерживает ли браузер File API? Да, использовать его; нет, есть ли у него Flash? Да,используйте его, нет ... ).Обратите внимание, что независимо от того, что вы делаете на стороне клиента, вы должны также применять ограничение на сервере, потому что вы не можете рассчитывать на любую проверку на стороне клиента, когда-либо.

Re File API, это свойство size в записи для файла в коллекции files ввода файла.Вот как вы можете проверить, поддерживается ли File API, и использовать его для получения размера файла в соответствующем оборудованном браузере:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Size</title>
<style type='text/css'>
body {
    font-family: sans-serif;
}
</style>
<script type='text/javascript'>

    function showFileSize() {
        var input, file;

        if (typeof window.FileReader !== 'function') {
            write("The file API isn't supported on this browser yet.");
            return;
        }

        input = document.getElementById('filename');
        if (!input) {
            write("Um, couldn't find the filename element.");
        }
        else if (!input.files) {
            write("This browser doesn't seem to support the `files` property of file inputs.");
        }
        else if (!input.files[0]) {
            write("Please select a file before clicking 'Show Size'");
        }
        else {
            file = input.files[0];
            write("The size of file '" + file.name + "' is " + file.size + " bytes");
        }

        function write(msg) {
            var p = document.createElement('p');
            p.innerHTML = msg;
            document.body.appendChild(p);
        }
    }

</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='filename'>
<input type='button' id='btnShowSize' value='Show Size' onclick='showFileSize();'>
</form>
</body>
</html>

(Это адаптировано из моего ответа на этот другойвопрос здесь в StackOverflow о размерах изображения.)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...