Что использовать вместо FileReader для Safari?

#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