Jquery文件上载-$\u文件数组为空
使用Jquery上传文件。它正在“工作”并上传图像和显示拇指。但是,当我在处理程序中提交表单时,如果我转储$\u文件,那里什么都没有Jquery文件上载-$\u文件数组为空,jquery,jquery-file-upload,Jquery,Jquery File Upload,使用Jquery上传文件。它正在“工作”并上传图像和显示拇指。但是,当我在处理程序中提交表单时,如果我转储$\u文件,那里什么都没有 <div class="control-group"> <label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
我基本上使用的是Basic Plus示例,autoUpload设置为false。我希望我能够使用它让用户选择多个图像。然后在表单提交后将其上传,处理方式基本上与我在页面上有X个文件上传按钮时的处理方式相同
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
使用autoUpload=TRUE上传也可以。我试过了,也没有在帖子或文件中看到任何东西
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
让这两种方法都能发挥作用的评论将是非常好的
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
下面是我的js
$('#fileupload').fileupload({
url: url,
method: 'POST',
dataType: 'json',
autoUpload: false,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
maxFileSize: 5000000, // 5 MB
// Enable image resizing, except for Android and Opera,
// which actually support image resizing, but fail to
// send Blob objects via XHR requests:
disableImageResize: /Android(?!.*Chrome)|Opera/
.test(window.navigator.userAgent),
previewMaxWidth: 100,
previewMaxHeight: 100,
previewCrop: true
}).on('fileuploadadd', function (e, data) {
data.context = $('<div/>').appendTo('#files');
$.each(data.files, function (index, file) {
var node = $('<p/>')
.append($('<span/>').text(file.name));
node.appendTo(data.context);
});
}).on('fileuploadprocessalways', function (e, data) {
var index = data.index,
file = data.files[index],
node = $(data.context.children()[index]);
if (file.preview) {
node
.prepend('<br>')
.prepend(file.preview);
}
if (file.error) {
node
.append('<br>')
.append($('<span class="text-danger"/>').text(file.error));
}
if (index + 1 === data.files.length) {
data.context.find('button')
.text('Upload')
.prop('disabled', !!data.files.error);
}
}).on('fileuploadprogressall', function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .progress-bar').css(
'width',
progress + '%'
);
}).on('fileuploaddone', function (e, data) {
$.each(data.result.files, function (index, file) {
if (file.url) {
var link = $('<a>')
.attr('target', '_blank')
.prop('href', file.url);
$(data.context.children()[index])
.wrap(link);
} else if (file.error) {
var error = $('<span class="text-danger"/>').text(file.error);
$(data.context.children()[index])
.append('<br>')
.append(error);
}
});
}).on('fileuploadfail', function (e, data) {
$.each(data.files, function (index, file) {
var error = $('<span class="text-danger"/>').text('File upload failed.');
$(data.context.children()[index])
.append('<br>')
.append(error);
});
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
$('#fileupload')。fileupload({
url:url,
方法:“POST”,
数据类型:“json”,
自动上载:false,
acceptFileTypes:/(\.\/)(gif | jpe?g | png)$/i,
最大文件大小:5000000,//5 MB
//启用图像大小调整,Android和Opera除外,
//它实际上支持图像大小调整,但无法
//通过XHR请求发送Blob对象:
disableImageResize:/Android(?。*Chrome)| Opera/
.test(window.navigator.userAgent),
预览最大宽度:100,
预览最大高度:100,
previewCrop:true
}).on('fileuploadadd',函数(e,数据){
data.context=$('').appendTo('#文件');
$.each(data.files,函数(索引,文件){
变量节点=$(“”)
.append($('').text(file.name));
appendTo(data.context);
});
}).on('fileuploadprocessalways',函数(e,数据){
var指数=data.index,
file=data.files[index],
node=$(data.context.children()[index]);
if(file.preview){
节点
.prepend(“
”)
.prepend(file.preview);
}
if(file.error){
节点
.append(“
”)
.append($('').text(file.error));
}
if(索引+1==data.files.length){
data.context.find('按钮')
.text(“上载”)
.prop('disabled',!!data.files.error);
}
}).on('fileuploadprogressall',函数(e,数据){
var progress=parseInt(data.loaded/data.total*100,10);
$('#progress.progress bar').css(
“宽度”,
进度+“%”
);
}).on('fileuploaddone',函数(e,数据){
$.each(data.result.files,函数(索引,文件){
if(file.url){
变量链接=$('')
.attr('target','u blank')
.prop('href',file.url);
$(data.context.children()[index])
.wrap(link);
}else if(file.error){
var error=$('').text(file.error);
$(data.context.children()[index])
.append(“
”)
.append(错误);
}
});
}).on('fileuploadfail',函数(e,数据){
$.each(data.files,函数(索引,文件){
var error=$('').text('文件上载失败');
$(data.context.children()[index])
.append(“
”)
.append(错误);
});
}).prop('disabled',!$.support.fileInput)
.parent().addClass($.support.fileInput?未定义:“已禁用”);
这是我的html
<form action="/submit_form" accept-charset="utf-8" class="form-horizontal review-validate-form" id="review-form" autocomplete="off" enctype="multipart/form-data" method="POST"><div style="display:none">
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
评论*
添加文件。。。
通过为上传的每个文件添加一个隐藏的输入,我可以处理它们,并在表单提交后将它们添加到数据库中,从而使其正常工作
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
我觉得应该有一些内置的东西来处理这个问题,但现在这个工作
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
添加了一个FileHidden div来保存隐藏字段
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
<div id="files" class="files"></div>
然后更新了js,其中附加了一个带有文件名的隐藏输入,以传递给我的表单处理程序,这样我就可以将图像与表单提交链接起来
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
}).on('fileuploaddone', function (e, data) {
$.each(data.result.files, function (index, file) {
if (file.url) {
$( "#filesHidden" ).append( '<input type="hidden" name="images[]" value="' + file.name + '">' );
} else if (file.error) {
var error = $('<span class="text-danger"/>').text(file.error);
$(data.context.children()[index])
.append('<br>')
.append(error);
}
});
}
}).on('fileuploaddone',函数(e,数据){
$.each(data.result.files,函数(索引,文件){
if(file.url){
$(“#文件隐藏”).append(“”);
}else if(file.error){
var error=$('').text(file.error);
$(data.context.children()[index])
.append(“
”)
.append(错误);
}
});
}
下面的完整示例(在下面的评论中要求)。注意,我的示例还为每个上传的图像添加了一个标题文本框
<div class="control-group">
<label class="required control-label" for="first_name">Comments <span class="required">*</span></label>
<div class="controls">
<textarea name="comments" cols="40" rows="10" class="span8 required" id="comments" ></textarea> </div>
</div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="form-actions" style="">
<input type="submit" value="Submit Review" name="submitReview" class="btn btn-primary btn-large">
</div>
</form>
var url = '/js/fileUpload/server/php/';
uploadButton = $('<button/>')
.addClass('btn btn-primary')
.prop('disabled', true)
.text('Processing...')
.on('click', function () {
var $this = $(this),
data = $this.data();
$this
.off('click')
.text('Abort')
.on('click', function () {
$this.remove();
data.abort();
});
data.submit().always(function () {
$this.remove();
});
});
$('#fileupload').fileupload({
url: url,
method: 'POST',
dataType: 'json',
autoUpload: true,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
maxFileSize: 5000000, // 5 MB
// Enable image resizing, except for Android and Opera,
// which actually support image resizing, but fail to
// send Blob objects via XHR requests:
disableImageResize: /Android(?!.*Chrome)|Opera/
.test(window.navigator.userAgent),
previewMaxWidth: 100,
previewMaxHeight: 100,
previewCrop: true
}).on('fileuploadadd', function (e, data) {
data.context = $('<div/>').appendTo('#files');
}).on('fileuploadprocessalways', function (e, data) {
var index = data.index,
file = data.files[index],
node = $(data.context.children()[index]);
if (file.preview) {
var node = $('<p/>')
.append('<br /><strong>Description</strong>: <input type="text" name="title[]" value="">');
node.appendTo(data.context);
node = $(data.context.children()[index]);
node
.prepend('<br>')
.prepend(file.preview);
}
if (file.error) {
alert(file.error);
}
if (index + 1 === data.files.length) {
data.context.find('button')
.text('Upload')
.prop('disabled', !!data.files.error);
}
}).on('fileuploadprogressall', function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .progress-bar').css(
'width',
progress + '%'
);
}).on('fileuploaddone', function (e, data) {
$.each(data.result.files, function (index, file) {
if (file.url) {
$( "#filesHidden" ).append( '<input type="hidden" name="images[]" value="' + file.name + '">' );
} else if (file.error) {
var error = $('<span class="text-danger"/>').text(file.error);
$(data.context.children()[index])
.append('<br>')
.append(error);
}
});
}).on('fileuploadfail', function (e, data) {
$.each(data.files, function (index, file) {
var error = $('<span class="text-danger"/>').text('File upload failed.');
$(data.context.children()[index])
.append('<br>')
.append(error);
});
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
var url='/js/fileUpload/server/php/;
uploadButton=$('')
.addClass('btn btn primary')
.prop('disabled',true)
.text('正在处理…')
.on('单击',函数(){
变量$this=$(this),
data=$this.data();
美元这个
.off('单击')
.text(“中止”)
.on('单击',函数(){
$this.remove();
data.abort();
});
data.submit()始终(函数(){
$this.remove();
});
});
$('#fileupload')。fileupload({
url:url,
方法:“POST”,
数据类型:“json”,
自动上传:对,
acceptFileTypes:/(\.\/)(gif | jpe?g | png)$/i,
最大文件大小:5000000,//5 MB
//启用图像大小调整,Android和Opera除外,
//它实际上支持图像大小调整,但无法
//通过XHR请求发送Blob对象:
disableImageResize:/Android(?。*Chrome)| Opera/
.test(window.navigator.userAgent),
预览最大宽度:100,
预览最大高度:100,
previewCrop:true
}).on('fileuploadadd',函数(e,数据){
data.context=$('').appendTo('#文件');
}).on('fileuploadprocessalways',函数(e,数据){
var指数=data.index,
file=data.files[index],
node=$(data.context.children()[index]);
if(file.preview){
变量节点=$(“”)
.append(“
说明:”);
appendTo(data.context);
node=$(data.context.children()[index]);
节点
.prepend('