<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. |
Стоп! Но разве скрипт не должен получить доступ к указаному пользователе файлу? Хотя для такого случая можно пойти на крайность(для меня это так) и воспользоваться AJAX но как то не очень хочется это делать.
|
Скрипт то получает доступ к файлу, но не раскрывает путь, по которому он получен на машине клиента. Это относится к вопросу по безопасности, и никакой Ajax в этом не поможет. Уж не помню точно, но Ослика точно можно заставить раскрыть этот путь добавив сайт в доверенные. В других браузерах не проверял, не знаю.
В общем не получится "обдурить" браузер, по крайней мере у меня не получилось. Остается только FileReader использовать, код исправлен под него. |
Ладно спасибо. Я понял что это, ну по крайней в мере в большей части глупая затея. Тема закрыта.
|
Затея чего, узнать разрешение изображения на клиенте? Чем же она глупая? В старых браузерах это только на сервере корректно можно получить, что впрочем все равно придется на нем делать, если вам необходимо контролировать разрешение.
|
Я просто хотел изначально проверять размер загружаемого изображения.
|
размер, это сколько вести файл, а разрешение, это ширина на высоту. Если размер, то FileReader не нужен, это можно узнать как files[0].size.
|
Не правильны выразился "Разрешение". И да почему вы говрите что AJAX не поможет? Можноже отправить картинку на сервер а потом просто получить с него всю информацию о данном файле. Разве нет?
|
Цитата:
А чем? Тут уж не разрешение надо возвращать, а ошибку в случае если оно не удовлетворяет требованию, то есть это уже проверка на сервере перед загрузкой файлов, а не забава ради информации. :) Об это я говорил ранее. Если ошибок нет, перемещаем файл в каталог и возвращаем "Ок". Между прочим, заставлять пользователя загружать картинку под аватарку строго W x H, это вчерашний день - сервер спокойно может уменьшить изображение, вырезать пропорционально и никаких проблем. А ограничения можно на тип файла (не картинка, или не разрешать gif-анимацию, если больше размера аватарки и нечем на сервер работать с такой анимацией), размер файла не позволит уменьшить его (памяти не хватит), и т.п. |
Я к стаи что то малость не понял что падете вот тут r.onload = function(e) в е и обясните это e.target.result и это r.readAsDataURL(f) а то что то я малость не доконца понимаю эти строчки.
|
Часовой пояс GMT +3, время: 04:14. |