Uploadify руины загружать файлы, когда нет вспышки в браузере - PullRequest
8 голосов
/ 28 февраля 2011

У меня есть HTML-форма с элементом загрузки файла, который основан на Uploadify.К сожалению, если в браузере не установлена ​​/ не включена флеш-память (я тестировал на Chrome и Safari), то элемент загрузки файла полностью исчезает, хотя я ожидал, что по крайней мере обычный, обычный,html-элемент загрузки файла в качестве запасного варианта.

Вы можете увидеть это поведение даже в официальной демонстрации Uploadify (по состоянию на сегодня, 28.2.2011):

http://www.uploadify.com/demos/

Anyoneнашел способ обойти это?Приветствия


ничего из этого не работает в ситуации, когда флэш-память установлена, но отключена!например, эта строка:

if (swfobject.getFlashPlayerVersion().major === 0)

ведет себя так же, как установлена ​​и включена флеш-погода, или установлена ​​и отключена!Я думал о получении загружаемого API и его проверке, но я нашел ноль примеров, есть идеи?

Ответы [ 10 ]

3 голосов
/ 23 июля 2012

Если вы используете последнюю версию uploadify, вы можете использовать событие onFallback, чтобы определить, установлена ​​ли флэш-память (или поддерживается ли требуемая флэш-версия флэш-памяти):

$("#file_upload").uploadify({
    'swf'        : '/uploadify/uploadify.swf',
    'uploader'   : '/uploadify/uploadify.php',
    'onFallback' : function() {
        alert('Flash was not detected or flash version is not supported.');
    }
});
3 голосов
/ 15 февраля 2012

Я использую событие onSWFReady , которое не срабатывает, если вспышка отключена, конечно. Я удаляю блок, содержащий исходный файл ввода и показываю div загрузки, если SWF загружен, работает как шарм:

onSWFReady: function() {
    $('#property-post .upload .browse').remove();
    $('#uploadify').css('display', 'block');
}
2 голосов
/ 06 января 2012

Вот как я решил эту проблему. Я добавил к своему коду:

<!--Flash Fallback-->
<div>
  <object type="application/x-shockwave-flash" width="0" height="0">
    <a href="http://www.adobe.com/go/getflashplayer" target="_blank"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a>
  </object>
</div>

Затем я расположил ее абсолютно над кнопкой загрузки, чтобы вместо кнопки загрузки отображалась кнопка «Get Flash Player», если в браузере не установлена ​​вспышка.

После установки флэш-плеера кнопка «Get Flash Player» исчезает, когда объект имеет ширину и высоту, равные 0.

2 голосов
/ 19 ноября 2011

Я думаю Загрузка файла jQuery - отличное решение для этого.

Особенности:

  1. Загрузка нескольких файлов
  2. Поддержка Drag & Drop
  3. Индикатор выполнения загрузки
  4. Отменяемые загрузки
  5. Возобновляемые загрузки
  6. Частичные загрузки
  7. Предварительный просмотр изображений
  8. Не требуются плагины для браузера (например, Adobe Flash)
  9. Изящный запасной вариант для устаревших браузеров
  10. Резервный вариант загрузки файла HTML
  11. Межсайтовая загрузка файлов
  12. Несколькоэкземпляры плагинов
  13. Настраиваемые и расширяемые
  14. Загрузка потоков из нескольких частей и содержимого файла
  15. Совместимость с любой серверной прикладной платформой
1 голос
/ 11 октября 2012

Мое решение работает в IE6, IE9, Firefox, Chrome и Safari, с включенным, отключенным или не установленным Flash.

Я начинаю с базовой формы загрузки HTML-файла:

<input id='f_file' name='f_file' type='file' />
<input id='f_submit' name='f_submit' type='submit' value='Upload' />

Событие onFallback вызывается, когда требуемая версия Flash не установлена ​​или отключена. В этом случае я «уничтожаю» экземпляр uploadify, который сбрасывает его обратно в базовую HTML-форму.

'onFallback' : function() {
    $("#f_file").uploadify("destroy");
}
1 голос
/ 28 февраля 2011

Я также был очень доволен plupload (http://www.plupload.com/). Он поддерживает HTML 5, Flash, Silverlight, Google gears и HTML 4.

1 голос
/ 28 февраля 2011

Я удивлен, Uploadify не ухудшается изящно, кажется ключевым требованием. Если вы не хотите обходить его самостоятельно, вы можете использовать библиотеку, которая обеспечивает запасной вариант, когда Flash отсутствует.

http://swfupload.org/

SWFUpload - это небольшая библиотека JavaScript / Flash, чтобы получить лучшее из обоих миров. Это отличные возможности загрузки Flash, а также доступность и простота HTML / CSS.

  • Загрузка нескольких файлов одновременно с помощью ctrl / shift-selection в диалоговом окне
  • обратные вызовы JavaScript для всех событий
  • Получить информацию о файле до начала загрузки
  • Стиль загрузки элементов с использованием XHTML и css
  • Отображение информации во время загрузки файлов с использованием HTML
  • Нет необходимости в перезагрузке страницы
  • Работает на всех платформах / браузерах с поддержкой Flash.
  • Изящно понижается до обычной формы загрузки HTML, если Flash или javascript недоступны
  • Контроль размера файла перед началом загрузки
  • Отображать только выбранные типы файлов в диалоге
  • Очередь закачек, удаление / добавление файлов перед началом загрузки
0 голосов
/ 15 марта 2013

Это работает, если Flash не установлен, а Flash установлен, но отключен.Я только подтвердил это в IE7-9 и FF19, но должен работать в любом браузере, который может использовать Uploadify SWF-версию.

В html есть 2 деления.Один без Flash и с Flash

<div id="uploadifyDiv" runat="server" style="float: left; width: 100%; margin-top: 10px;">
  <div id="uploadifyNoFlashDiv">
   <p style="font-weight:bold; background-color:Red; color:Black;">Flash is not installed or is not enabled</p>       
     File upload requires Flash to be installed and enabled.<br />
     Click <a href="http://get2.adobe.com/flashplayer/" target="_blank">here</a> to install<br />
     You will need to <a href="javascript:window.location.href=window.location.href">refresh</a> the page when installation is completed</p>
  </div>
  <div id="uploadifyHasFlashDiv" style="display:none;">
    <asp:FileUpload ID="ImageFileUpload" runat="server" />
  </div>
</div>

В сценарий Uploadify включите функцию для onInit

onInit : function(instance) {
  $('[id$="uploadifyNoFlashDiv"]').css('display','none');
  $('[id$="uploadifyHasFlashDiv"]').css('display','block');},

Если Flash не установлен или не установлен, но не включен, то uploadifyNoFlashDivбудет показан div, в противном случае OnInit скроет div uploadifyNoFlashDiv и покажет div uploadifyHasFlashDiv, который, при условии, что все остальное в порядке, отобразит элемент управления Uploadify.

Это, конечно, не предоставляет никаких функциональных возможностей, если пользователь не устанавливает Flash, но делает это по крайней мере
- Покажите соответствующее сообщение, сообщающее, что ему необходимо установить Flash (или включить его, если он уже установлен)
- скрыть общий FileUpload, который появляется в случае сбоя сценария Uploadify.

IMHO Uploadify по-прежнему превосходит другие загрузчики, упомянутые в качестве альтернативы, поскольку он единственный, который обеспечивает выбор нескольких файлов в браузерах, отличных от HTML5, что, к сожалению, включаетIE9 на Win7.Все остальные загрузчики позволяют выбирать только один файл в диалоге файлов.

РЕДАКТИРОВАТЬ: На медленных соединениях Div без установленного Flash будет отображаться до того, как скрипт Uploadify сможет запустить, что вводит в заблуждение пользователя, если у него установлен Flash, и div в конечном итоге будет скрыт.В этом сценарии добавьте еще один div с загрузочным gif в нем, а затем запустите некоторый скрипт при загрузке документа, чтобы показать соответствующий div.

<div id="uploadifyDiv" runat="server" style="float: left; width: 100%; margin-top: 10px;">
    <div id="uploadifyNoFlashDiv" runat="server" class="infoBoxDiv" style="display: block;">
        <div id="uploadifyNoFlashLoadingDiv" style="display:block">
            <img src="../images/uploading.gif" alt="Loading ..." /> Loading. Please wait a moment ...
        </div>
        <div id="uploadifyNoFlashFinalDiv" style="display:none;">
            <p style="font-weight: bold; background-color: Red; color: Black;">
                Flash is not installed or is not enabled</p>
            <p>
                File upload requires Flash to be installed and enabled.<br />
                Click <a href="http://get2.adobe.com/flashplayer/" target="_blank">here</a> to install<br />
                You will need to <a href="javascript:window.location.href=window.location.href">refresh</a>
                the page when installation is completed
            </p>
        </div>
    </div>
    <div id="uploadifyHasFlashDiv" runat="server" style="display: none;">
        <asp:FileUpload ID="ImageFileUpload" runat="server" />
    </div>
</div>

<script language="javascript" type="text/javascript">
    // If the NoFlashDiv is still visible then hide the loading gif and show the info box
    // Otherwise leave alone and the Uploadify script will do its thing
    $(document).ready(function() {
        if ($('[id$="uploadifyNoFlashDiv"]').css('display') == 'block')
        {
            $('[id$="uploadifyNoFlashLoadingDiv"]').css('display','none');
            $('[id$="uploadifyNoFlashFinalDiv"]').css('display','block');
        }                
    });
</script>
0 голосов
/ 04 апреля 2012

Почему вы не можете сделать следующее (если у вас есть swfobject)?

if(swfobject.getFlashPlayerVersion().major > 0)
   //uploadify code here...
}

Если обнаружена флэш-память, выполняется скрипт загрузки. В противном случае он изящно ухудшает стандартный ввод файла браузера.

Я проверил это в Chrome / FireFox / Safari / IE7 / IE8, и он работает просто отлично.

0 голосов
/ 05 мая 2011

У меня была та же проблема, и я обошел ее с помощью библиотеки обнаружения Javascript Flash . Это небольшой файл сценария, который позволяет проверить текущую версию Flash Player.

...