#plupload
#загрузка
Вопрос:
Я использую plupload на сайте mvc и хотел бы загрузить один файл, как только он будет выбран. Я установил для автозапуска элемента управления загрузчиком значение true, но это не активирует загрузку. Я также пытался вызвать uploader.start();
делегат ‘filesadded’ загрузчика, но это работает только со вторым файлом, который я пытаюсь загрузить. Я использую plupload 1.4.3.2 без виджета пользовательского интерфейса. Вот мой код:
var uploader = new plupload.Uploader({
runtimes: 'gears,html5,flash,silverlight,browserplus',
browse_button: 'pickfiles',
autostart : true,
max_file_size: '10mb',
url: '/Event/Upload',
resize: { width: 320, height: 240, quality: 90 },
flash_swf_url: '/Scripts/pl/plupload.flash.swf',
silverlight_xap_url: '/Scripts/pl/plupload.silverlight.xap',
filters: [
{ title: "Image files", extensions: "jpg,gif,png" },
{ title: "Zip files", extensions: "zip" }
]
});
uploader.bind('Init', function (up, params) {
$('#filelist')[0].innerHTML = "<div>Current runtime: " params.runtime "</div>";
});
uploader.bind('Error', function (up, err) {
$('#filelist').append("<div>Error: " err.code
", Message: " err.message
(err.file ? ", File: " err.file.name : "")
"</div>"
);
});
uploader.bind('FilesAdded', function (up, files) {
for (var i in files) {
$('#filelist')[0].innerHTML = '<div id="' files[i].id '">' files[i].name ' (' plupload.formatSize(files[i].size) ') <b></b></div>';
}
//uploader.start();
});
$('#uploadfiles').click(function (e) {
uploader.start();
e.preventDefault();
});
uploader.bind('UploadProgress', function (up, file) {
$('#' file.id)[0].getElementsByTagName('b')[0].innerHTML = '<span>' file.percent "%</span>";
});
uploader.init();;
Комментарии:
1. Мне удалось заставить ее работать, добавив вызов функции up.start с таймаутом из метода FilesAdded, такого как: setTimeout(функция () { up.start(); }, 1000);
Ответ №1:
В вашем файле добавлено событие, измените uploader.start(); на setTimeout(‘uploader.start()’, 100);
Комментарии:
1. Спасибо, была такая же проблема, и это помогло. Я получал сообщение об ошибке «q не определен».
2. Я не понимаю, почему за это так много голосов, использование
setTimeout
для устранения проблемы с последовательностью выполнения является плохой новостью .
Ответ №2:
«Убедитесь, что вы привязываете ее после инициализации, поскольку она привязывает обработчики по умолчанию».
(Я знаю, что это слишком поздно, но мне все еще нравится это решение)
Ответ №3:
Точно! Просто упорядочиваем команду в этом порядке:
uploader.init();
uploader.bind('FilesAdded', function(up, files) {
...
uploader.start();
});
Комментарии:
1. Пожалуйста, предоставьте больше контекста вашему ответу; «именно» что? Кроме того, это предложение неясно; «Просто упорядочивание команды в этом порядке».