使用Blueimp jquery文件上传插件进行可选文件上传

时间:2013-02-27 18:21:13

标签: jquery jquery-file-upload blueimp

该问题与jquery file upload plugin from blueimp

有关

我正在构建一个文件上传是可选的表单。事实证明,当没有选择上传文件时,我无法发布表格。正因为如此,我必须在我的页面上创建两个表单,并且如果用户决定不添加实际数据,则执行所有脏检查以删除上载的文件。

问题是:

即使没有选择文件,我是否可以提交表单,以便我仍然可以在服务器端接收其他表单数据?

3 个答案:

答案 0 :(得分:4)

我自己也有同样的问题。我有一个表单(内置Angular),使用蓝色imp角度实现。表格本身有字段;该文件是可选的。需要成为一个帖子(有或没有文件)。

在提交()上没有任何反应。

仅在添加文件时触发上面列出的“有用事件”。

答案 1 :(得分:1)

我知道我迟到了,但到目前为止还没有列出真正的解决方案。您可以通过手动调用add事件来伪造正在添加文件的事实:

$('#fileupload').fileupload('add', { files: [{}] });

您可以设置一个变量来存储表单信息,在添加时更新变量,如果没有文件则触发上面的添加。这是代码的样子:

var fileData;
$('#fileupload').fileupload({
    add: function (e, data) {
        fileData = data;
    }
});

$('form').submit(function () {
    if (!fileData) {
        $('#fileupload').fileupload('add', { files: [{}] });
    }
    fileData.formData = params;
    fileData.submit();
    return false;
});

这使您可以与数据传递到服务器的方式保持一致。

答案 2 :(得分:0)

我知道这是一个老问题,但对于那些在同一问题上挣扎的人来说:

你需要深入了解Doc:

https://github.com/blueimp/jQuery-File-Upload/wiki/Options

有一系列有用的活动:

$('#fileupload')
.bind('fileuploadadd', function (e, data) {/* ... */})
.bind('fileuploadsubmit', function (e, data) {/* ... */})
.bind('fileuploadsend', function (e, data) {/* ... */})
.bind('fileuploaddone', function (e, data) {/* ... */})
.bind('fileuploadfail', function (e, data) {/* ... */})
.bind('fileuploadalways', function (e, data) {/* ... */})
.bind('fileuploadprogress', function (e, data) {/* ... */})
.bind('fileuploadprogressall', function (e, data) {/* ... */})
.bind('fileuploadstart', function (e) {/* ... */})
.bind('fileuploadstop', function (e) {/* ... */})
.bind('fileuploadchange', function (e, data) {/* ... */})
.bind('fileuploadpaste', function (e, data) {/* ... */})
.bind('fileuploaddrop', function (e, data) {/* ... */})
.bind('fileuploaddragover', function (e) {/* ... */})
.bind('fileuploadchunksend', function (e, data) {/* ... */})
.bind('fileuploadchunkdone', function (e, data) {/* ... */})
.bind('fileuploadchunkfail', function (e, data) {/* ... */})
.bind('fileuploadchunkalways', function (e, data) {/* ... */});