Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отмена события (https://javascript.ru/forum/events/58923-otmena-sobytiya.html)

laimas 19.10.2015 14:37

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    $('#filess').change(function() {
        if(window.FileReader) {
            var im = new Image(), r = new FileReader(), f = this.files[0], type = f.type;
            r.onload = function(e) {
                im.onload = function() {
                    alert('Type: '+type+'\n'+'Width: '+this.width+'\n'+'Height: '+this.height)
                }
                im.src = e.target.result;
            }
            r.readAsDataURL(f)
        } else {
            //сорри, только через сервер 
        }
    })
});
</script>     
</head> 

<body>
<form id="ka">
<input type="file" id="filess" name="files"/>
<input type="submit" value="Send"/>
</form>
</body> 
</html>


Вам нужно отправлять один файл, а значит name="files", иначе при name="files[]" лишь усложниться структура массива принятых файлов.

<button type="submit"> - такого быть не может, или input type="submit" или button.

PS. Причина в безопасности - для того чтобы использовать свойство value, изображение должно быть в том же каталоге что и скрипт, что в случае веб-страницы нельзя реализовать. В IE можно добавить сайт в доверенные, тоже будет доступно. Сейчас попробую по иному, если не получится, то нужно нужно будет использовать, например, FileReader.

artiom4356 19.10.2015 15:13

Стоп! Но разве скрипт не должен получить доступ к указаному пользователе файлу? Хотя для такого случая можно пойти на крайность(для меня это так) и воспользоваться AJAX но как то не очень хочется это делать.

laimas 19.10.2015 15:33

Скрипт то получает доступ к файлу, но не раскрывает путь, по которому он получен на машине клиента. Это относится к вопросу по безопасности, и никакой Ajax в этом не поможет. Уж не помню точно, но Ослика точно можно заставить раскрыть этот путь добавив сайт в доверенные. В других браузерах не проверял, не знаю.

В общем не получится "обдурить" браузер, по крайней мере у меня не получилось. Остается только FileReader использовать, код исправлен под него.

artiom4356 19.10.2015 15:39

Ладно спасибо. Я понял что это, ну по крайней в мере в большей части глупая затея. Тема закрыта.

laimas 19.10.2015 15:47

Затея чего, узнать разрешение изображения на клиенте? Чем же она глупая? В старых браузерах это только на сервере корректно можно получить, что впрочем все равно придется на нем делать, если вам необходимо контролировать разрешение.

artiom4356 19.10.2015 17:01

Я просто хотел изначально проверять размер загружаемого изображения.

laimas 19.10.2015 17:21

размер, это сколько вести файл, а разрешение, это ширина на высоту. Если размер, то FileReader не нужен, это можно узнать как files[0].size.

artiom4356 19.10.2015 17:27

Не правильны выразился "Разрешение". И да почему вы говрите что AJAX не поможет? Можноже отправить картинку на сервер а потом просто получить с него всю информацию о данном файле. Разве нет?

laimas 19.10.2015 17:42

Цитата:

Сообщение от artiom4356
И да почему вы говрите что AJAX не поможет?


А чем? Тут уж не разрешение надо возвращать, а ошибку в случае если оно не удовлетворяет требованию, то есть это уже проверка на сервере перед загрузкой файлов, а не забава ради информации. :)
Об это я говорил ранее. Если ошибок нет, перемещаем файл в каталог и возвращаем "Ок". Между прочим, заставлять пользователя загружать картинку под аватарку строго W x H, это вчерашний день - сервер спокойно может уменьшить изображение, вырезать пропорционально и никаких проблем. А ограничения можно на тип файла (не картинка, или не разрешать gif-анимацию, если больше размера аватарки и нечем на сервер работать с такой анимацией), размер файла не позволит уменьшить его (памяти не хватит), и т.п.

artiom4356 19.10.2015 19:16

Я к стаи что то малость не понял что падете вот тут r.onload = function(e) в е и обясните это e.target.result и это r.readAsDataURL(f) а то что то я малость не доконца понимаю эти строчки.


Часовой пояс GMT +3, время: 04:14.