#javascript #safari #filereader
#javascript #safari #filereader
Вопрос:
(Я новичок в веб-программировании, поэтому приношу извинения за отсутствие элементарных знаний.)
Моя страница позволяет пользователю выбрать файл, который затем считывается на стороне клиента и отображается в текстовом поле на странице. Самый простой способ, который я нашел для этого, — использовать объект FileReader, который отлично работает в Firefox и Chrome.
Это не работает в Safari (пока), так что же мне делать вместо этого?
//When the eventlistener detects a change in the input file...
var file = evt.target.files[0]
var reader = new FileReader();
reader.onload = function (e){document.getElementById('data').value = e.target.result};
reader.readAsText(file);
Соответствующие примечания:
- Я работаю с Safari для Windows
- Прямо сейчас страница локальна, как и файл для чтения. У Chrome были проблемы с этим, пока я не использовал флаг —allow-file-access-from-files
Ответ №1:
К сожалению, единственный ответ, который я могу придумать, потребует дополнительной пропускной способности.
Во-первых, используйте что-то вроде if (typeof FileReader !== "undefined"
или Modernizr, чтобы следовать вашему обычному потоку для браузеров, которые поддерживают FileReader. В противном случае ОТПРАВЬТЕ файл через AJAX в какой-нибудь серверный скрипт, который повторяет содержимое.
Таким образом, для совместимых браузеров вы можете сэкономить некоторую пропускную способность, а для несовместимых браузеров вам придется использовать один для команды.
Комментарии:
1. Возможно, это удовлетворит ваши потребности, хотя: github.com/dcneiner/Downloadify
2. Спасибо! Это было глупо, но я просто не знал, каковы альтернативные возможности (думаю, это случается, когда вы все еще новичок во всем!)
3. Мне очень понравился ваш ответ, похоже, это отзывчивый способ справиться с этой ситуацией. Спасибо.
4. @Quickredfox братан, у меня та же проблема, я понял первую часть, и она работает идеально, но часть ajax меня смущает, нужно ли отправлять весь входной файл в ajax? пожалуйста, объясните подробно, что представляет собой моя кодовая функция showimagepreview(input) { if(input. файлы amp;amp; ввод. файлы[0]) { if (window. FileReader){ var fr=new FileReader(); fr.onload=function(e) { $(«#image»).attr(‘src’, e.target.result); $(«#storedProfileImage»).attr(‘value’, e.target.result); } fr.readAsDataURL(ввод. files[0]); } else{ alert(); console.log(ввод. файлы); }} }
Ответ №2:
Другим решением является использование «полизаполнения FileReader для Internet Explorer и Safari с использованием Flash»
Смотрите: https://github.com/Jahdrien/FileReader