Предварительный просмотр изображения перед загрузкой в IE и Chrome
Я пытаюсь создать модуль, в котором я хотел бы показать предварительный просмотр изображения пользователю, прежде чем он загрузит изображение в базу данных.
Я нашел решение, которое работает для Firefox, но не работает для IE и Chrome...Может кто-нибудь мне помочь.
вот мой код:-
function imageURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$('#replaceMe').attr('src', e.target.result)
.width(100)
.height(100);
}
reader.readAsDataURL(input.files[0]);
}
}
и я вызываю эту функцию при изменении события элемента управления вводом файла: -
<input type="file" class="file" onchange="imageURL(this)" />
а также я пробовал это URL-адресом шагов но он не работает для IE7 и 8 и Chrome.
7 ответов
нет кросс-платформенного способа выполнить это, используя только HTML / JavaScript. Однако можно использовать очень простой программный подход:
Шаг 1: привязка к размытию
Привяжите событие "размытие" к полю ввода файла, например:
$("#input_field").blur(function(event){
alert("Blur!");
});
Шаг 2: Серверная Миниатюр
Вам придется написать небольшое приложение / маршрут на стороне сервера, которое просто принимает форму, содержащую входные данные file, и генерирует временный выходной файл. Вы даже можете временно хранить filedata в своей базе данных, а не записывать отдельные файлы на диск; реализация зависит от вас. Когда этот маршрут получает запрос, он должен эскиз изображения, а затем верните путь к этому миниатюре
Шаг 3: AJAX
Во-первых, выберите один из много доступные библиотеки jQuery" AJAX Upload " для создания формы, содержащей ваш загрузите файл через AJAX. Примените эту библиотеку к форме(для приведенных ниже примеров я буду использовать ajaxForm.), а затем измените размытие:
// AJAX the form
$("#your_form").ajaxForm({
success: function(response){
// Insert your returned thumbnail into your DOM.
}
});
// Modify the blur
$("#input_field").blur(function(event){
$("#input_field").closest("form").submit();
});
вопросы:
С вышеуказанным подходом возникнут проблемы. Создание вашей формы AJAX будет означать, что ее регулярная отправка будет нарушена , не говоря уже о том, что маршрут эскиза будет отличаться от фактического маршрута отправки формы. Используйте некоторые обходные пути (например, имейте вторичную скрытую форму и размытие событие копирует файл-загружает на него, а затем отправляет его).
Это не будет работать в любом другом браузере, кроме firefox, потому что объект FileReader, который вы используете, не является JS standered, это класс, очень специфичный для FireFox. В соответствии с веб-стандартными сценариями браузера (javascript) не будет иметь разрешения безопасности для чтения содержимого любых системных ресурсов(файлов).
в IE вы можете попытаться получить некоторый ActiveXObject (filesystemobject, с) поможет получить доступ к содержимому файловой системы.
нет кросс-браузерного решения (даже FileReader
нужны определенные разрешения в Firefox), только некоторые обходные пути для ie и firefox.
вы должны сделать обычным способом, загрузить изображение во временный файл и удалить/сохранить его в зависимости от подтверждения пользователя
надеюсь, что это помогает
по данным когда я могу использовать..., файл API поддерживается в Firefox 3.6+, Chrome 9+, Opera 11.1+ (и Safari 6).
Если вам это действительно нужно в IE, вы можете создать загрузчик файлов во Flash.
Я согласен с nay-sayers, которые уже ответили-локальные файлы запрещены конструкция.
но, если вы не действительно привержены этой функции предварительного просмотра перед загрузкой и готовы включить некоторые ухабистые UX, вы можете обойти вопрос local / server и...
...используйте сопроводительное приложение AIR для обработки загрузки изображений для вашего веб-приложения.
создать простой воздух приложение, которое позволяет пользователям выбирать локальные изображения и отображать их в миниатюрах без их загрузки.
вы можете проверить, установлено ли приложение у пользователя, и в этот момент Вы можете предложить им установить или запустить его, если он уже установлен (см. здесь больше об этом). Вы можете позволить им отказаться и использовать резервную систему загрузки без предварительного просмотра миниатюр.
Как только изображения выбраны и рассмотренные (или даже измененные или иным образом обработанные), приложение AIR может загрузить их на ваш сервер напрямую.
Это безумие, я знаю, и, вероятно, не соответствует вашим навыкам или ожиданиям (на основе тегов по этому вопросу), но я думаю, что это сработает.
попробуйте это для IE
<style type="text/css">
#imgPreview {
width:320px;
height:280px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
}
</style>
<h2>Preview images for MS-IE < 10</h2>
<form id="form1" runat="server">
<input type="file" onchange='document.getElementById("imgPreview").filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src=this.value' />
<div id="imgPreview"></div>
</form>
Скрипка:http://jsfiddle.net/Sme2L/5/
используйте jQuery ajax для решения вашей проблемы.
$.ajax({
type: "post",
url: "serverURL?randomParam="+(Math.random() * 1000),
cache: false,
data: null,
success: function(json){
try{
var obj = JSON.parse(json);
if(obj[0].IMAGE!=null){
$("#captchaImage").attr("src", obj[0].IMAGE);
}
}catch(e) {
showMessage("E1");
}
},
error: function(){
}
});