В нашем проекте мы используем plupload для загрузки одного файла excel. Это работает во всех браузерах, кроме IE9. При щелчке ссылки для загрузки отображается диалоговое окно с файлом, но при попытке открыть excel ничего не происходит. Ниже приведен код для справки, и любая помощь для его решения будет высоко оценена. Заранее спасибо!
function initUploader(btnId, fileType, onSuccess) { if (typeof fileType == "undefined") fileType = "image"; var arrFilters = new Array(); var url = 'user/attachmentUpload'; switch (fileType) { case "image": arrFilters = [{title : "Image files", extensions : "jpg,jpeg,gif,png"}]; url = 'assets/imgupload'; break; case "xls": arrFilters = [{title : "Spreadsheet files", extensions : "xls,xlsx"}]; url = 'user/attachmentUpload'; break; case "media": arrFilters = [{ title : "Media files", extensions : "mpeg4,mob,3gpp,avi,wmv,mp3,m4a,ogg,wav" }]; break; case "document": arrFilters = [{ title : "Text files", extensions : "doc,docx" },{ title : "PDF files", extensions : "pdf" }]; break; default: arrFilters = [ { title : "Image files", extensions : "jpg,jpeg,gif,png" }, { title : "Zip files", extensions : "zip" }, { title : "Media files", extensions : "mpeg4,mob,3gpp,avi,wmv,mp3,m4a,ogg,wav" }, { title : "Spreadsheet files", extensions : "xls,xlsx" }, { title : "Text files", extensions : "doc,docx" }, { title : "PDF files", extensions : "pdf" } ]; break; } var uploader = new plupload.Uploader({ runtimes : 'gears,html5,html4,flash,silverlight,browserplus', browse_button : btnId, //container : 'container', max_file_size : '10mb', url : url, flash_swf_url : 'assets/js/vendor/plupload/plupload.flash.swf', silverlight_xap_url : 'assets/js/vendor/plupload/plupload.silverlight.xap', multiple_queues : false, filters : arrFilters, resize : {width : 320, height : 240, quality : 90} }); $('#'+btnId).change(function(){ uploader.start(); }); uploader.refresh(); uploader.init(); uploader.bind('FilesAdded', function(up, files) { up.refresh(); // Reposition Flash/Silverlight Utility.showProcessingBar(); uploader.start(); }); uploader.bind('Error', function(up, err) { alert("Error: " + err.code + ", Message: " + err.message + (err.file ? ", File: " + err.file.name : "")); up.refresh(); // Reposition Flash/Silverlight }); uploader.bind('FileUploaded', function(up, file, response) { var obj = eval('(' + response.response + ')'); //alert('Files uploaded'); if (typeof onSuccess == "function") onSuccess(obj.fileName); }); }
Для всех, у кого такая же проблема, как и я:
У меня был следующий код HTML:
<div class="container" style="display:none"> <div> Logo: </div> <div style="clear"></div> <div id="uploader"> <div id="runtime" class="right"> No runtime was found ! </div> <div> <a id="pickfiles" href="#">[Select files]</a> <a id="uploadfiles" href="#">[Upload files]</a> </div> </div> </div>
container
классов был создан как диалог:
$(function(){ $(".container").dialog({modal:true, width:400}); });
Поскольку мы знаем, что div
изначально скрыт из-за display: none
(конечно, вы можете настроить autoOpen:false
как новый параметр в объекте диалога), мы можем удалить стиль.
В IE8 (возможно, в более ранней и более поздней версии) загрузчик не может быть правильно создан, если div
скрыт. (Возвращает указанную выше ошибку)
В Chrome и Firefox (я не тестировал эту проблему в Opera), он отлично работает.
Поэтому мой совет – избегать скрытых блоков (даже если вы хотите создать модальный диалог).
Я удалил display:none
стиль и dialog
объект из этого div
и теперь он отлично работает в IE8.
Зачем? Я не знаю, почему в IE экземпляр объекта не создается при запуске страницы, хотя в Firefox и Chrome экземпляр был создан нормально.
Для максимальной совместимости вы должны изменить список приоритетов плагинов.
var uploader = new plupload.Uploader({ runtimes : 'gears,html5,html4,flash,silverlight,browserplus',
ЗАМЕНИТЕ, ЧТО С
var uploader = new plupload.Uploader({ runtimes : 'flash,html5,silverlight,browserplus,gears,html4',
Убедитесь, что файл флеш-памяти существует, и путь относится к местоположению вашего js-файла.
flash_swf_url : 'assets/js/vendor/plupload/plupload.flash.swf',
Я работаю с этим jquery.
Вы можете попробовать это, так как я работаю с этим в ie7 + и все браузеры для загрузки файлов.
Вот код файла, который я новичок, о том, как загрузить файл js здесь.
<form id="uploadForm" method="post" enctype="multipart/form-data" action="javascript:void(0);" autocomplete="off"> <div class="vasplusfile_adds"> <label>Upload More</label> <input type="hidden" name="myfile" /> <div class="input customfile-container"> <input type="file" name="uploadfile" id="file" /> </div> <div class="clear"></div> <br> <div class="input" id="status" align="left" > </div> </div> </form> <script> $(function() { $('#upload_file').live('change',function() { $("#status").html('<div id="upload_now" class="btn">Click to Upload</div>');}); $('#upload_now').live('click', function() { $("#uploadForm").vPB({ beforeSubmit: function() { $("#status").html('<div style="" align="center">Loading</div>'); url: '', success: function(response) { // my response after file uploaded }}).submit(); }); }); </script>
Пример можно найти из моей скрипки .
Счастливого кодирования 🙂
live demo use working in ie7 http://vasplus.info/demos/upload_without_page_refresh/index.php