不说废话,直接上代码。一个中文乱码搞了我好久时间。后来发现自己是画蛇添足了。
要注意jsp与form的交互,与我以前的ajax的交互方式不太一样。
test.html
var form = new Ext.form.FormPanel({
labelAlign: 'right',
title: 'form',
labelWidth: 50,
buttonAlign: 'center',
frame:true,
fileUpload: true,
url: 'test.jsp',
width: 280,
items: [{
xtype: 'textfield',
fieldLabel: '文本框',
name: 'file',
inputType: 'file'
}],
buttons: [{
text: '提交',
handler: function() {
form.getForm().submit({
success: function(form,action){
Ext.Msg.alert('信息', action.result.msg);
},
failure: function(){
Ext.Msg.alert('错误', '失败');
}
});
}
}]
});
form.render("form");
test.jsp
/*加这两行会乱码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
*/
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload fileload = new ServletFileUpload(factory);
fileload.setSizeMax(4194304);
//开始读取上传信息
/*
J2SE 提供的最后一个批注是 @SuppressWarnings。
该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
*/
@SuppressWarnings("unchecked")
List<FileItem> fileItems = (List<FileItem>) fileload.parseRequest(request);
Iterator<FileItem> iter = fileItems.iterator(); // 依次处理每个上传的文件
while (iter.hasNext()) {
FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();//获取上传文件名,包括路径
System.out.println(name);
if(name != null){
File filetoserver = new File("D:\\",name);
item.write(filetoserver);
System.out.println("文件:" + name + "上传成功,大小是" + item.getSize());
}
}
}
response.getWriter().print("{success:true,msg:'上传成功'}");