Отключение автоматической загрузки в Blueimp jQuery File Upload

Я использую плагин blueint jquery.fileupload для загрузки файлов с помощью asp.net.

У меня есть ситуация, когда у меня есть страница, позволяющая пользователю выбрать категорию (раскрывающийся список), заголовок (для загруженного файла - TextBox) и ввод файла (обрабатывается плагином).

плагин: https://github.com/i-e-b/jQueryFileUpload.Net

javascript/jquery:

 $('#fileup').fileupload({
                    replaceFileInput: false,
                    formData: function (form) {
                        return [{ name: 'dcat', value: $('#ddlCats').val() }, { name: 'title', value: $('#txtTitle').val()}];
                    },
                    dataType: 'json',
                    url: '/_handlers/FileHandler.ashx',
                    add: function (e, data) {
                        var valid = true;
                        var re = /^.+\.((doc)|(xls)|(xlsx)|(docx)|(pdf)|(pts))$/i;
                        $.each(data.files, function (index, file) {
                            if (!re.test(file.name)) {
                                $('#uploaded').html('This file type is not supported');
                                valid = false;
                            }
                        });
                        if (valid)
                            data.submit();
                    },
                    done: function (e, data) {
                        $.each(data.result, function (index, file) {
                            $('#uploaded').html(file);
                        });
                        GetFiles($('#ddlCats').val())
                    },
                    error: function () {
                        alert('An error occured while uploading the document.');
                    }
                });

HTML:

<div id="fUpload">
<span style="font-weight:bold;">Yeni Belge:</span><br />
    <table class="ktoeos">
        <tr>
            <td>Category:</td>
            <td> <select id="ddlCats"></select></td>
        </tr>
        <tr>
            <td>Document Description:</td>
            <td><input type="text" id="txtTitle" /></td>
        </tr>
        <tr>
            <td>Select Document:</td>
            <td><input type="file" name="file" id="fileup" /></td>
        </tr>
        <tr>
           <td colspan="2"><input type="submit" id="btnSubmit" value="Upload" /></td>
        </tr>
    </table>
    <div id="uploaded"></div>

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

Поскольку я не очень хороший программист javascript, я понятия не имею, доступна ли эта функциональность (что, вероятно, есть) в файлах .js, доступных с плагином. Любые идеи, что мне нужно изменить или сделать?


person Subliminal Hash    schedule 06.03.2012    source источник


Ответы (2)


Обратный вызов add вызывается, как только файлы добавляются в виджет, поэтому вам необходимо переопределить его, чтобы приостановить загрузку, а затем запустить ее нажатием кнопки.

add: function (e, data) {
    $("#btnSubmit").click(function () {
        // validate file...
        if(valid)
            data.submit();
    });
}

Обновление: в документации есть лучший пример этого сейчас:

person Walter    schedule 27.06.2012
comment
Именно то, что я искал. Единственная проблема в том, что текстовое поле не показывает путь к файлу. - person ffffff01; 23.08.2012

Это очень легко сделать, так как есть опция " autoUpload: true", которая установлена ​​по умолчанию в jquery.fileupload-ui.js.

Если вы измените его на false, и вы можете вручную закодировать событие Click кнопки.

person coder    schedule 06.03.2012
comment
Спасибо за ответ, у меня не было этого файла, поэтому я скачал и включил его в свой проект и поверх соответствующей страницы. Затем изменил autoUpload на false, как было предложено, но ничего не изменилось. Все еще загружает, как только я выбираю файл. Нужно ли что-то менять в коде? У меня есть эти файлы. Может быть, есть что-то по этому поводу: + jquery-1.7.js + jquery-ui-1.8.17.custom.min.js + jquery.fileupload.js + jquery.iframe-transport.js + jquery.fileupload-ui.js - person Subliminal Hash; 06.03.2012
comment
@Emin-Вот путь к Jquery fileupload-ui.js, из которого вы дали ссылку jQueryFileUpload.Net/jQueryFileUpload/scripts/Default/jquery.fileupload-ui.js(Или) вы можете найти реализацию asp.Net отсюда webtrendset.com/2011/06/22/ - person coder; 06.03.2012
comment
@Emin-Перейти на эту страницу github.com/blueimp/jQuery-File-Upload/downloads загрузите последнюю версию, откройте ее в обозревателе решений и перейдите в папку js, в которой вы можете найти jquery.fileupload-ui.js, выполнить поиск по запросу autoupload и установить для него значение «false» вместо «true». и если вы хотите использовать загрузчик, вам следует использовать Jquery 1.7+ - person coder; 06.03.2012
comment
Мне не повезло, и я потерялся во всех этих файлах javascript. Есть ли способ обернуть $('#fileup').fileupload({}); функция в jquery button.click? - person Subliminal Hash; 06.03.2012
comment
@Emin-Вы не можете обернуть это нажатием кнопки, так как вы должны упомянуть об этом в своих параметрах. И это то, что у меня есть, и вы можете протестировать этот простой, у которого для автозагрузки установлено значение false. Проверьте и дайте мне знать, если у вас есть какие-либо проблемы. Вот ссылка box.com/s/g54ychd24obrt8fplqu3 - person coder; 06.03.2012
comment
У меня есть все файлы, но это не моя реализация. можно ли что-нибудь понять из этой ссылки? github.com/blueimp/jQuery-File-Upload/issues/946 Кстати, приношу свои извинения, если доставил вам головную боль, и спасибо за попытку помочь.. - person Subliminal Hash; 06.03.2012
comment
@Emin-Нет проблем, я рад помочь вам, и я думаю, что что-то может быть не так с вашими данными, можете ли вы опубликовать исходный код, чтобы я мог взглянуть на него и опубликовать его снова. - person coder; 06.03.2012
comment
Спасибо... вот ссылка на файлы: box.com/s/3v6u7ejcmrc24buqxoso - person Subliminal Hash; 06.03.2012
comment
@Emin-Почистил ваш код, и вот рабочая версия box.com/s/fipso4tnk55bsb3grhgv - person coder; 06.03.2012
comment
Очень странно, у меня вроде не заработало. Скажите, пожалуйста, что именно вы меняли? так что я могу начать оттуда? - person Subliminal Hash; 06.03.2012
comment
Операторы импорта являются основной причиной, по которой попробуйте изменить их на imports.microsoft.sqlserver. - person coder; 06.03.2012
comment
:) Хорошо, я думаю, что я схожу с ума здесь .. Моя проблема заключается в том, чтобы предотвратить автоматическую загрузку плагина загрузки jQuery, как только я выберу файл. Вместо этого я хочу нажать кнопку, чтобы сделать это. Я не понимаю, какое это имеет отношение к моему серверному коду, который отлично работает. Я думаю, что я выберу другой плагин. В любом случае, большое спасибо за попытку помочь. - person Subliminal Hash; 06.03.2012
comment
Если вы используете тот, который не является пользовательским интерфейсом, просто загляните в соответствующий файл js. - person ImaginedDesign; 27.06.2014