当前请求不是 [org.springframework.web.multipart.MultipartHttpServletRequest] 类型
Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]
我正在尝试使用以下方法上传文件。但我得到 java.lang.IllegalStateException: 当前请求不是类型 [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@1b04024.
当我调用 form.submit();而不是 form.submit(function(){ 使用 ajax 调用它按预期工作。但我需要 return 来自 Spring 控制器的字符串值并进入 JS 函数。下面代码确实有效。
Angularjs函数:
function fnSubmitUploadForm(formData){
var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none"></iframe>');
$("body").append(iframe);
var form = $('#upload');
form.attr("action", CONTEXT_PATH+"/uploadFile");
form.attr("method", "post");
form.attr("encoding", "multipart/form-data");
form.attr("enctype", "multipart/form-data");
form.attr("target", "postiframe");
form.attr("uploadfile", $('#uploadfile').val());
var input = $('<input type="hidden" name="filename"/>').val(formData);
input.appendTo(form);
form.submit(function(){
$.ajax({
url: form.attr('action'),
type: 'POST',
data : form.serialize(),
success: function(){
alert('form submitted.');
}
});
return false;
});
}
Spring控制器方法:
@RequestMapping(value="/uploadFile", method=RequestMethod.POST)
public @ResponseBody String uploadFile(MultipartHttpServletRequest request, HttpServletResponse response){
try{
MultipartFile file =(MultipartFile) request.getFile("uploadfile");
String[] formData=request.getParameterValues("filename");
}
}
原因是你在js提交中使用了表单序列化,它不能序列化文件类型等表单属性!看看这个 link:
我已经通过下面的代码解决了这个问题。
form.submit(function(){
var formData1 = new FormData($(this)[0]);
$.ajax({
url: form.attr('action'),
type: 'POST',
data: formData1,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(){
alert('form submitted.');
}
});
return false;
});
我正在尝试使用以下方法上传文件。但我得到 java.lang.IllegalStateException: 当前请求不是类型 [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@1b04024.
当我调用 form.submit();而不是 form.submit(function(){ 使用 ajax 调用它按预期工作。但我需要 return 来自 Spring 控制器的字符串值并进入 JS 函数。下面代码确实有效。
Angularjs函数:
function fnSubmitUploadForm(formData){
var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none"></iframe>');
$("body").append(iframe);
var form = $('#upload');
form.attr("action", CONTEXT_PATH+"/uploadFile");
form.attr("method", "post");
form.attr("encoding", "multipart/form-data");
form.attr("enctype", "multipart/form-data");
form.attr("target", "postiframe");
form.attr("uploadfile", $('#uploadfile').val());
var input = $('<input type="hidden" name="filename"/>').val(formData);
input.appendTo(form);
form.submit(function(){
$.ajax({
url: form.attr('action'),
type: 'POST',
data : form.serialize(),
success: function(){
alert('form submitted.');
}
});
return false;
});
}
Spring控制器方法:
@RequestMapping(value="/uploadFile", method=RequestMethod.POST)
public @ResponseBody String uploadFile(MultipartHttpServletRequest request, HttpServletResponse response){
try{
MultipartFile file =(MultipartFile) request.getFile("uploadfile");
String[] formData=request.getParameterValues("filename");
}
}
原因是你在js提交中使用了表单序列化,它不能序列化文件类型等表单属性!看看这个 link:
我已经通过下面的代码解决了这个问题。
form.submit(function(){
var formData1 = new FormData($(this)[0]);
$.ajax({
url: form.attr('action'),
type: 'POST',
data: formData1,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(){
alert('form submitted.');
}
});
return false;
});