我正在尝试使用ExtJs和Spring上传文件(excel)而没有运气,所以我希望你能帮助我。在面板中我有一个按钮(fileuploadfield),我选择了一个文件,我想上传。
.
.
,{
xtype: 'fileuploadfield',
buttonOnly: true,
hideLabel: true,
buttonText: "Importuoti excel failą",
border: false,
itemId: "uploadBtn",
name: 'file'
},
.
.
这是我的控制器。每次我用fileuploadfield选择文件时,它都会激活函数uploadFile()。
init: function() {
var me = this;
this.listen({
'#uploadBtn': {
'change': function(fld, value) {
console.log(value);
this.getTurtasPanel().setLoading(true, true);
if(value != ""){
me.uploadFile();
fld.reset();
}
}
},
})
uploadFile函数。
uploadFile: function(){
var fp = Ext.create('Ext.form.Panel', {
fileUpload: true,
autoHeight: true,
bodyStyle: 'padding: 10px 10px 0 10px;',
labelWidth: 50,
method: 'POST',
defaults: {
anchor: '95%',
allowBlank: false,
msgTarget: 'side'
}
})
if(fp.getForm().isValid()){
fp.getForm().submit({
url: Turtas.Properties.getServicePath()+'/save/' + record.data.resource,
headers: {'Content-Type':'multipart/form-data; charset=UTF-8'},
})
}
},
和Spring控制器:
@RequestMapping(value="turtas/save/gelezinkeliai", method=RequestMethod.POST)
public @ResponseBody void saveGelezinkeliaiFromExcel(@RequestParam("file") MultipartFile file){
System.out.println(file);
}
我得到的错误:
Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
the request was rejected because no multipart boundary was found
我认为问题出在我的客户端请求中。我认为我的请求没有附加我要上传的文件。我试图在客户端将Headers设置为undefined,但随后内容类型变为“application / json”,我得到的错误是请求不是multipart。那我的代码出了什么问题?我真的希望有人帮我解决这个问题。提前谢谢!
更新
感谢@Lorenz Meyer的答案,但现在我得到了不同的错误:
java.lang.IllegalArgumentException:你的InputStream既不是 OLE2流,也不是OOXML流
我改变了我的源代码。
@RequestMapping(value="turtas/save/gelezinkeliai", method=RequestMethod.POST)
public @ResponseBody void saveGelezinkeliaiFromExcel(@RequestParam("file") MultipartFile file){
System.out.println(file.getContentType());
System.out.println(file.getSize());
System.out.println(file.getName());
System.out.println(file.getOriginalFilename());
System.out.println(file.isEmpty());
}
输出:
application/octet-stream
0
file
true
从客户端我不包含参数,从服务器端我请求一个参数(文件参数),也许这就是问题。错误说我选择了错误的格式文件,虽然我选择了.xlsx或.xls,并且发生了同样的错误。
答案 0 :(得分:0)
问题是您在上传功能中创建了一个新表单。您可以提交新的空表单,而不是提交包含文件上传按钮的表单。
首先,您必须确保文件上传按钮位于表单内。然后你必须提交该表格。
在更改处理程序中,在此行添加fld:
me.uploadFile(fld);
将URL设置为表单的属性,并将uploadFile简化为:
uploadFile: function(fld){
var form = fld.up('form').getForm()
if(form.isValid()) form.submit()
}
顺便说一句,记录(在record.data.resource中)没有定义,似乎你的代码不完整或者它不起作用。