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

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

Моя страница позволяет пользователю выбрать файл, который затем читается на стороне клиента и отображается в текстовом поле на странице. Самый простой способ сделать это — использовать объект 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

person Emma    schedule 12.10.2011    source источник


Ответы (2)


К сожалению, единственный ответ, который я могу придумать, потребует дополнительной пропускной способности.

Во-первых, используйте что-то вроде if (typeof FileReader !== "undefined" или Modernizr, чтобы следовать обычному процессу для браузеров, поддерживающих FileReader. В противном случае отправьте файл через AJAX в какой-нибудь серверный скрипт, который отобразит содержимое.

Таким образом, для совместимых браузеров вы можете сэкономить некоторую пропускную способность, а для несовместимых браузеров вы должны взять один для команды.

person Quickredfox    schedule 01.11.2011
comment
Возможно, это удовлетворит ваши потребности: github.com/dcneiner/Downloadify - person Quickredfox; 03.11.2011
comment
Спасибо! Это казалось глупым, но я просто не знал, какие были альтернативные возможности (угадайте, что происходит, когда вы еще новичок во всем!) - person Emma; 25.01.2012
comment
Мне очень понравился ваш ответ, он кажется отзывчивым способом справиться с такими ситуациями. Спасибо. - person Gaston Sanchez; 18.08.2013
comment
@Quickredfox, братан, у меня та же проблема, я понял первую часть, и она работает отлично, но часть ajax меня смущает. Нужно ли отправлять весь входной файл в ajax? пожалуйста, объясните подробно, что это мой код function showimagepreview(input) { if(input.files && input.files[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(input.files[0]); } иначе{ оповещение(); console.log(входные.файлы); }} } - person ; 07.09.2015

Другим решением является использование «полифилла FileReader для Internet Explorer и Safari с использованием Flash».

См.: https://github.com/Jahdrien/FileReader.

person Tony    schedule 13.09.2014