这几天要做一个页面的上传和下载,从年前一直纠结到现在,一直以为是Extjs基础下的上传下载,其实与Extjs基本没有什么关系,只是一直思维被局限于Extjs界面的缘故。听说Extjs4.0有对应的控件,由于目前公司项目非4.0,所以目前暂未实现过,下面记录一下自己目前总结的解决办法。
上传:
{
xtype : 'textfield',
fieldLabel : '上传文件',
name : 'userfile',
id : 'userfile',
inputType : 'file',
width : 300,
height : 20
//emptyText: '请选择上传文件...' 不知道为什么 这两个参数在IE8下都是无效的
// blankText : 'File can\'t not empty.'
}
由一个Button触发上传:
{
xtype : 'button',
text : '上传',
name : 'doc_upbut',
id : 'doc_upbut',
handler : function() {
if (form.form.isValid()) {
var upFile = Ext.getCmp('userfile').getValue();
if(upFile == ''){
Ext.Msg.alert('错误','请选择你要上传的文件');
return;
}
var upFileLastName = upFile.toString();
var LastNames = upFileLastName.split("\.")
if(LastNames[LastNames.length-1] == ("exe")){
Ext.Msg.alert('错误','不支持该类型文件!');
return;
}
var file_up = document.getElementById('userfile');
file_up.select();
var realpath = document.selection.createRange().text;
realpath = encodeURIComponent(realpath);//IE8以上会出现一个虚拟路径,在此要获取真实路径
Ext.MessageBox.show({
title : '请稍等',
msg : '文件正在上传...',
progressText : '',
width : 300,
progress : true,
closable : false,
animEl : 'loding'
});
Ext.Ajax.request({
url : '../control/IndexDocument?act=updateLoad',
params : {
filePath : realpath,
fatherPath :doc_majorCode
},
method: 'POST',
success: function (request ) {
var resp=Ext.util.JSON.decode(request.responseText);
if(resp.success == 'fail'){
Ext.Msg.alert('信息','<center>上传失败!<p>'+ resp.Info+'</center>');
}
else{
Ext.Msg.alert('提示', '上传成功!');
doc_store.reload();
doc_grid.getView().refresh();
doc_store.commitChanges();
}
},
failure: function ( result, request) {
Ext.Msg.alert('错误','上传时出现未知错误.');
}
});
}
}}
handler处理:
public String updateLoad(HttpServletRequest request,HttpServletResponse response) {
String jsonData = "";
String frompage = "";
try {
String path = request.getSession().getServletContext().getRealPath(rootDir);
String filePath = URLDecoder.decode(request.getParameter("filePath"),"utf-8");
String fatherPath = request.getParameter("fatherPath");
frompage= (request.getParameter("frompage") != null)? request.getParameter("frompage") : "";
jsonData = docUtil.updateLoad(filePath,fatherPath,path);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
jsonData = e.getMessage();
}
if (!jsonData.equalsIgnoreCase("")) {
jsonData = "{success:'fail',Info:'" + jsonData + "'}";
} else {
jsonData = "{success:'success',Info:'上传成功!'}";
}
request.setAttribute("jsonData", jsonData);
if(frompage.equals("")){
return "extDataPage";
}else if(frompage.equals("downloadFileListPage")){
return downloadFileList(request,response);
}else{
return frompage;
}
}
docUtil处理:
public String updateLoad(String filePath, String fatherPath, String path) {
String ret="";
File upFileDir = new File(path + "\\" + fatherPath);
if(!upFileDir.exists()){
upFileDir.mkdirs();
}
String s[] = filePath.split("\\\\");
String fileName = s[s.length-1];
File inFile = new File(filePath);
File outFile = new File(upFileDir.getPath() + "\\" + fileName);
FileInputStream fis;
FileOutputStream fos;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream(inFile);
fos = new FileOutputStream(outFile);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
byte[] b = new byte[1024];
int len;
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
bos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
ret="文件上传失败!";
} catch (IOException e) {
e.printStackTrace();
ret="文件上传失败!";
}finally{
try {
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return ret;
}
贴上自己写的项目代码,http://download.csdn.net/detail/nisior/5093021