Посмотреть изображение, выбранное в файловой системе на стороне клиента перед загрузкой? - PullRequest
14 голосов
/ 06 июня 2011

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

<div id="lowresDemo">
    <img src="some-url" />
</div>
<input type="file" id="FileToUpload" name="FileToUpload" />

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

$('#FileToUpload').change(function () {
    $('#lowresDemo img').attr('src', $(this).val());
});

... это не работает ни в одном браузере, по соображениям безопасности браузера, я верю (как я помню, когда в последний раз я делал что-то подобноелет назад).

ВОПРОС :
Существует ли способ предоставить пользователю выбор изображения перед отправкой формы, а не только путь к файлу + имя значения вполе ввода, но миниатюра, показывающая выбранный файл?

Или современная безопасность браузера предотвращает это?

Ответы [ 2 ]

41 голосов
/ 06 июня 2011

Это возможно с помощью File API (IE не поддерживает File API)

<input type="file">
<script type="text/javascript">
    $(document).ready(function() {
    $("input").change(function(e) {

    for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) {
        var file = e.originalEvent.srcElement.files[i];

        var img = document.createElement("img");
        var reader = new FileReader();
        reader.onloadend = function() {
            img.src = reader.result;
        }
        reader.readAsDataURL(file);
        $("input").after(img);
    }
});
    });
</script>

Рабочий пример: http://jsfiddle.net/ugPDx/

1 голос
/ 06 июня 2011

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

Но подумайте об этом по-другому - пользователю «все равно», если изображение уже загружено, - вы можете показать миниатюру после его загрузки и установить флажок подтверждения. Gmail делает это со своими вложениями электронной почты - как только вы выбрали файл для вложения, загрузка начнется. Но у пользователя всегда есть возможность снять флажок, и он не будет включен в электронное письмо.

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