Extjs文件选择器详解编程语言

Ext.hoo.component.FileBrowserComponent.js

/**  
* Ext.hoo.component.FileBrowserWindow 系统文件浏览选择组件,可以选定电脑上的文件或文件夹  
* @author: hoojo  
* @createDate 2010-10-17  
* @email: [email protected]  
* @blog: http://blog.csdn.net/IBM_hoojo  
* @ext_lib: v2.2  
* @version 1.0   
*/   
Ext.ns("Ext.hoo.component");   
Ext.hoo.component.FileBrowserWindow = Ext.extend(Ext.Window, {   
constructor: function (config) {   
config = config || {};   
Ext.apply(this, config);   
this.tree = new Ext.hoo.tree.FileSystemTree();   
Ext.hoo.component.FileBrowserWindow.superclass.constructor.call(this, {   
renderTo: Ext.getBody(),   
width: 300,   
height: 300,   
frame: true,   
layout: "fit",   
border: false,   
title: "请选择",   
items: this.tree,   
buttons: [{   
text: "新建",   
disabled: true,   
handler: this.onNewHandler,   
scope: this   
}, {   
text: "确定",   
disabled: true,   
handler: this.onOkHandler,   
scope: this   
}, {   
text: "取消",   
handler: function () {   
this.hide(Ext.getBody());   
},   
scope: this   
}]   
});   
},   
onNewHandler: function () {   
this.setPath();   
this.setFile();   
Ext.Msg.prompt("新建文件", "请输入文件夹名称", this.onCreateDir, this);   
},   
onOkHandler: function () {   
this.setPath();   
this.setFile();   
Ext.Msg.alert("路径", this.getPath());   
},    
onCreateDir: function (btn, text) {   
if (btn == "ok") {   
var path = this.getPath();   
var node = this.getFile();   
var dirName = text;   
if (!!path && !!dirName) {   
//本地添加模式   
/*var newNode = new Ext.tree.AsyncTreeNode({  
text: dirName,  
path: node.attributes.path + "/" + dirName  
});  
node.expand(true, true);  
node.appendChild(newNode);*/   
//远程加载模式   
                Ext.Ajax.request({   
url: Ext.hoo.tree.FileSystemTree.TREE_CREATE_DIR_URL,   
params: {path: encodeURIComponent(path), dirName: encodeURIComponent(dirName)},//处理中文文件名,乱码问题   
success: function (response, options) {   
var returnNnode = Ext.decode(response.responseText);   
node.appendChild(returnNnode);   
node.expand(true);   
},   
failure: function (response) {   
Ext.Msg.alert("程序异常", response.responseText);   
}   
});   
}   
}   
},   
setPath: function () {   
this.path = this.tree.getSelectedNode().attributes.path || "";   
},   
setFile: function () {   
this.nodeFile = this.tree.getSelectedNode() || {};   
},   
getPath: function () {   
return this.path;      
},   
getFile: function () {   
return this.nodeFile;   
}   
});   
/**  
* Ext.hoo.component.FileBrowserPanel 系统文件浏览选择组件,可以选定电脑上的文件或文件夹  
* 不同于上面的是,这里是一个panel。有时候弹出window,并不能达到预想的效果。特别是window弹出在  
* iframe中的Object对象上面,如:在播放器上面弹出此组件,拖动windwo的效果不理想。  
* 这时就需要用模态,模态嵌入FileBrowserPanel组件即可  
* @author: hoojo  
* @createDate 2010-10-17  
* @email: [email protected]  
* @blog: http://blog.csdn.net/IBM_hoojo  
* @ext_lib: v2.2  
* @version 1.0   
*/   
Ext.hoo.component.FileBrowserPanel = Ext.extend(Ext.Panel, {   
constructor: function (config) {   
config = config || {};   
Ext.apply(this, config);   
this.tree = new Ext.hoo.tree.FileSystemTree();   
Ext.hoo.component.FileBrowserPanel.superclass.constructor.call(this, {   
renderTo: Ext.getBody(),   
border: false,   
width: 300,   
height: 400,   
layout: "fit",   
title: "请选择",   
items: this.tree,   
buttons: [{   
text: "新建",   
disabled: true,   
handler: this.onNewHandler,   
scope: this   
}, {   
text: "确定",   
disabled: true,   
handler: function () {   
this.path = this.tree.getSelectedNode().attributes.path || "";   
this.nodeFile = this.tree.getSelectedNode() || {};   
//window.returnValue = this.path;   
//window.close();   
Ext.Msg.alert("路径", this.path);   
},   
scope: this   
}, {   
text: "取消",   
handler: function () {   
this.hide(Ext.getBody());   
//window.close();   
                },   
scope: this   
}]   
});   
},   
onNewHandler: function () {   
this.setPath();   
this.setFile();   
Ext.Msg.prompt("新建文件", "请输入文件夹名称", this.onCreateDir, this);   
},   
onCreateDir: function (btn, text) {   
if (btn == "ok") {   
var path = this.getPath();   
var node = this.getFile();   
var dirName = text;   
if (!!path && !!dirName) {   
//本地添加模式   
/*var newNode = new Ext.tree.AsyncTreeNode({  
text: dirName,  
path: node.attributes.path + "/" + dirName  
});  
node.expand(true, true);  
node.appendChild(newNode);*/   
//远程加载模式   
                Ext.Ajax.request({   
url: Ext.hoo.tree.FileSystemTree.TREE_CREATE_DIR_URL,   
params: {path: encodeURIComponent(path), dirName: encodeURIComponent(dirName)},//处理中文文件名,乱码问题   
success: function (response, options) {   
var returnNnode = Ext.decode(response.responseText);   
node.appendChild(returnNnode);   
node.expand(true, true);   
},   
failure: function (response) {   
Ext.Msg.alert("程序异常", response.responseText);   
}   
});   
}   
}   
},   
setPath: function () {   
this.path = this.tree.getSelectedNode().attributes.path || "";   
},   
setFile: function () {   
this.nodeFile = this.tree.getSelectedNode() || {};   
},   
getPath: function () {   
return this.path;      
},   
getFile: function () {   
return this.nodeFile;   
}   
});   
/**  
* Ext.hoo.tree.FileSystemTree 系统文件树,显示所有的文件  
* @author: hoojo  
* @createDate 2010-10-17  
* @email: [email protected]  
* @blog: http://blog.csdn.net/IBM_hoojo  
* @ext_lib: v2.2  
* @version 1.0   
*/   
Ext.ns("Ext.hoo.tree");   
Ext.hoo.tree.FileSystemTree = Ext.extend(Ext.tree.TreePanel, {   
constructor: function () {         
Ext.hoo.tree.FileSystemTree.superclass.constructor.call(this, {   
//rootVisible: false,   
autoScroll: true,   
root: new Ext.tree.AsyncTreeNode({   
text: "My System Files",   
id: "0",   
path: "root",   
children:[]   
}),   
listeners: {   
expandnode: {   
fn: this.onExpandNode,   
scope: this   
}   
}   
});   
},   
onExpandNode: function (node) {   
//只对未加载过的添加子结点,加载后不在重复加载;避免增加请求,浪费资源   
if (!node.attributes.isLoad) {   
Ext.Ajax.request({   
url: Ext.hoo.tree.FileSystemTree.TREE_DATA_URL,   
params: {path: encodeURIComponent(node.attributes.path)},//处理中文文件名,乱码问题   
success: function (response, options) {   
node.attributes.isLoad = true;//设置加载标示   
var nodes = Ext.decode(response.responseText);   
node.appendChild(nodes);   
},   
failure: function (response) {   
Ext.Msg.alert("程序异常", response.responseText);   
}   
});   
}   
},    
getSelectedNode: function () {   
return this.getSelectionModel().getSelectedNode();   
}   
});   
Ext.hoo.tree.FileSystemTree.TREE_CREATE_DIR_URL = 'browserfile.app?dateTime=' + new Date().getTime() + '&subTranCode=mkDir';   
//Ext.hoo.tree.FileSystemTree.TREE_DATA_URL = "http://localhost:8080/Test/FileBrowser?method=getData"; 
Ext.hoo.tree.FileSystemTree.TREE_DATA_URL = 'browserfile.app?dateTime=' + new Date().getTime() + '&subTranCode=getData'; 
//Ext.hoo.tree.FileSystemTree.TREE_DATA_URL = "FileBrowser?method=getData"; 
function fromExcel(){ 
var dxjgdm_sel = Ext.get("dxjgdm").getValue(); 
var dxjglx_sel = Ext.get("dxjglx").getValue(); 
var fileBrowser = new Ext.hoo.component.FileBrowserWindow();   
//var fileBrowser = new Ext.hoo.component.FileBrowserPanel();   
    fileBrowser.show();   
fileBrowser.tree.getSelectionModel().on("beforeselect", function (sm, node) {   
//只能选择文件夹,如果要选择文件修改这里即可   
var flag = ((!node || (!!node && !!node.leaf)) || !(node.attributes.path.indexOf(":") != -1)) ? true : false;   
fileBrowser.buttons[0].setDisabled(flag);   
fileBrowser.buttons[1].setDisabled(flag);   
}, fileBrowser.tree); 
}
package com.hundsun.tamcx.tycfgl.ywcs.jgxxgl.util; 
import java.util.ArrayList; 
import java.util.List; 
/**  
* <b>function:</b>文件信息  
* @author hoojo  
* @createDate Oct 10, 2010 9:53:51 PM  
* @file FileInfo.java  
* @package com.hoo.entity  
* @project MultiUpload  
* @blog http://blog.csdn.net/IBM_hoojo  
* @email [email protected]  
* @version 1.0  
*/ 
public class FileInfo { 
//文件id   
private String id;   
//文件名称   
private String name;   
private String text;   
//文件路径   
private String path;   
//是否有目录,有无子节点   
private boolean leaf;   
//修改日期   
private String editDate;   
//后缀   
private String suffix;   
//长度   
private long length;   
// 子目录中所有文件   
private List<FileInfo> children = new ArrayList<FileInfo>();   
//setter、getter    
public String toString() {   
return "name:" + name + ", size:" + children.size();   
} 
public String getId() { 
return id; 
} 
public void setId(String id) { 
this.id = id; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public String getText() { 
return text; 
} 
public void setText(String text) { 
this.text = text; 
} 
public String getPath() { 
return path; 
} 
public void setPath(String path) { 
this.path = path; 
} 
public boolean isLeaf() { 
return leaf; 
} 
public void setLeaf(boolean leaf) { 
this.leaf = leaf; 
} 
public String getEditDate() { 
return editDate; 
} 
public void setEditDate(String editDate) { 
this.editDate = editDate; 
} 
public String getSuffix() { 
return suffix; 
} 
public void setSuffix(String suffix) { 
this.suffix = suffix; 
} 
public long getLength() { 
return length; 
} 
public void setLength(long length) { 
this.length = length; 
} 
public List<FileInfo> getChildren() { 
return children; 
} 
public void setChildren(List<FileInfo> children) { 
this.children = children; 
} 
}
package com.hundsun.tamcx.tycfgl.ywcs.jgxxgl.util; 
import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.UUID; 
/**  
* <b>function:</b> 磁盘文件操作工具类  
* @project Test  
* @package com.hoo.util   
* @fileName FileUtils.java  
* @createDate 2010-10-4 下午03:32:42  
* @author hoojo  
*/  
public abstract class FileUtils { 
/**  
* <b>function:</b>传递一个File,返回该文件的FileInfo实体类  
* @author hoojo  
* @createDate Oct 10, 2010 10:10:19 PM  
* @param file File  
* @return FileInfo  
*/   
public static FileInfo getFileInfo(File file) {   
FileInfo info = new FileInfo(); 
if (file != null) {   
info.setId(UUID.randomUUID().toString());  
if (file.getName() == null || "".equals(file.getName()) || "::".equals(file.getName())) { 
info.setName(file.getAbsolutePath());   
} else {   
info.setName(file.getName());   
}   
//info.setLeaf(file.isFile());   
info.setLeaf(!file.isDirectory());   
info.setLength(file.length());   
info.setPath(getDoPath(file.getAbsolutePath()));   
info.setSuffix(getType(file.getName()));   
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
Date date = new Date();   
date.setTime(file.lastModified());   
info.setEditDate(sdf.format(date)); 
}   
return info;   
}   
public static void setFileInfo(File file, FileInfo info) {   
if (file != null && info != null) {   
info.setId(UUID.randomUUID().toString());   
if (file.getName() == null || "".equals(file.getName()) || "::".equals(file.getName())) {   
info.setName(file.getAbsolutePath());   
} else {   
info.setName(file.getName());   
}   
//info.setLeaf(file.isFile());   
info.setLeaf(!file.isDirectory());   
info.setLength(file.length());   
info.setPath(getDoPath(file.getAbsolutePath()));   
info.setSuffix(getType(file.getName()));   
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
Date date = new Date();   
date.setTime(file.lastModified());   
info.setEditDate(sdf.format(date));   
}   
}   
/**  
* <b>function:</b>处理后的系统文件路径  
* @author hoojo  
* @createDate Oct 10, 2010 12:49:31 AM  
* @param path 文件路径  
* @return 返回处理后的路径  
*/   
public static String getDoPath(String path) {   
path = path.replace("//", "/");   
String lastChar = path.substring(path.length() - 1);   
if (!"/".equals(lastChar)) {   
path += "/";   
}   
return path;   
}   
/**  
* <b>function:</b>和文件后缀一样,不同的是没有“.”  
* @author hoojo  
* @createDate Oct 10, 2010 2:42:43 PM  
* @param fileName 文件名称  
* @return  
*/   
public static String getType(String fileName) {   
int index = fileName.lastIndexOf(".");   
if (index != -1) {   
String suffix = fileName.substring(index + 1);//后缀   
return suffix;    
} else {   
return null;   
}   
}   
/**  
* <b>function:</b> 得到指定目录下所有的文件集合  
* @createDate 2010-10-20 下午02:20:06  
* @author hoojo  
* @param info 将数据设置在该变量中  
* @param file 文件目录  
*/   
public static void getAllFileInfo(FileInfo info, File file) {   
if (file.isDirectory()) {   
long size = 0;   
File[] allFiles = file.listFiles();   
for (File f : allFiles) {   
size += f.length();   
FileInfo fi = getFileInfo(f);   
info.getChildren().add(fi);   
getAllFileInfo(fi, f);   
}   
info.setLength(size);   
}   
}   
/**  
* <b>function:</b> 得到当前目录所有文件  
* @createDate 2010-10-20 下午02:21:06  
* @author hoojo  
* @param info 文件对象  
* @param file 目录  
*/   
public static void getFileInfo(FileInfo info, File file, String[] allowTypes) {   
if (file.isDirectory()) {   
long size = 0;   
File[] allFiles = file.listFiles();   
for (File f : allFiles) {   
size += f.length();   
FileInfo fi = getFileInfo(f);   
if (f.isDirectory()) {   
info.getChildren().add(fi);   
} else {   
if (validTypeByName(f.getName(), allowTypes, true)) {   
info.getChildren().add(fi);   
}   
}   
}   
info.setLength(size);   
}   
}   
/**  
* <b>function:</b> 根据文件名和类型数组验证文件类型是否合法,flag是否忽略大小写  
* @author hoojo  
* @createDate Oct 10, 2010 11:54:54 AM  
* @param fileName 文件名  
* @param allowTypes 类型数组  
* @param flag 是否获得大小写  
* @return 是否验证通过  
*/   
public static boolean validTypeByName(String fileName, String[] allowTypes, boolean flag) {   
String suffix = getType(fileName);   
boolean valid = false;   
if (allowTypes.length > 0 && "*".equals(allowTypes[0])) {   
valid = true;   
} else {   
for (String type : allowTypes) {   
if (flag) {//不区分大小写后缀   
if (suffix != null && suffix.equalsIgnoreCase(type)) {   
valid = true;   
break;   
}   
} else {//严格区分大小写   
if (suffix != null && suffix.equals(type)) {   
valid = true;   
break;   
}   
}   
}   
}   
return valid;   
}   
/**  
* <b>function:</b> 在path目录下创建目录  
* @createDate 2010-11-3 下午04:03:34  
* @author hoojo  
* @param path  
* @param dirName  
* @return  
*/   
public static boolean mkDir(String path, String dirName) {   
boolean success = false;   
File file = new File(getDoPath(path) + dirName);   
if (!file.exists()) {   
success = file.mkdirs();   
}    
return success;   
} 
}
package com.hundsun.tamcx.tycfgl.ywcs.jgxxgl.util; 
import java.io.File; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.URLDecoder; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.swing.filechooser.FileSystemView; 
import net.sf.json.JSONArray; 
/**  
* <b>function:</b> 查询本地硬盘文件数据、创建目录  
* @project Test  
* @package com.hoo.servlet   
* @fileName FileBrowser.java  
* @author hoojo  
*/  
public class FileBrowser extends HttpServlet { 
/** 
*  
*/ 
private static final long serialVersionUID = 8642420418794855208L; 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
// TODO Auto-generated method stub 
response.setContentType("text/html");   
response.setCharacterEncoding("UTF-8");   
PrintWriter out = response.getWriter();   
String path = request.getParameter("path");   
path = path == null ? "" : URLDecoder.decode(path, "UTF-8");   
String method = request.getParameter("method");   
FileInfo info = new FileInfo();   
if ("getData".equals(method)) {   
if ("root".equals(path)) {             
FileSystemView fsv = FileSystemView.getFileSystemView();   
File[] roots = fsv.getRoots(); //File.listRoots();   
//桌面   
for (File f : roots) {   
info.getChildren().add(FileUtils.getFileInfo(f));   
}   
for (File f : roots[0].listFiles()) {   
if (f.getName().contains("My Documents")) {   
info.getChildren().add(FileUtils.getFileInfo(f));   
}   
}   
FileInfo fileInfo = new FileInfo();   
fileInfo.setName("我的电脑");   
fileInfo.setPath("My Computer");   
for (File fi : roots[0].listFiles()[0].listFiles()) {   
fileInfo.getChildren().add(FileUtils.getFileInfo(fi));   
}   
info.getChildren().add(fileInfo);   
fileInfo = new FileInfo();   
fileInfo.setName("网上邻居");   
fileInfo.setPath("Network Place");   
for (File fi : roots[0].listFiles()[1].listFiles()) {   
fileInfo.getChildren().add(FileUtils.getFileInfo(fi));   
}   
info.getChildren().add(fileInfo);   
out.print(JSONArray.fromObject(info.getChildren()).toString());   
} else if (path != null && !"".equals(path)) {   
FileUtils.getFileInfo(info, new File(path), new String[] {"*"});   
out.print(JSONArray.fromObject(info.getChildren()).toString());   
}    
}   
if ("mkDir".equals(method)) {   
String dirName = request.getParameter("dirName");   
dirName = dirName == null ? "" : URLDecoder.decode(dirName, "UTF-8");   
boolean success = false;   
try {   
success = FileUtils.mkDir(path, dirName);   
FileInfo node = FileUtils.getFileInfo(new File(FileUtils.getDoPath(path) + dirName));   
out.print(JSONArray.fromObject(node));   
} catch (Exception e) {   
e.printStackTrace();   
success = false;   
}   
System.out.println(success);   
}   
out.flush();   
out.close(); 
//super.doGet(req, resp); 
    } 
@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException { 
// TODO Auto-generated method stub 
super.doPost(req, resp); 
} 
}
package com.hundsun.tamcx.tycfgl.ywcs.jgxxgl.util; 
import java.io.File; 
import java.io.PrintWriter; 
import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 
import javax.swing.filechooser.FileSystemView; 
import net.sf.json.JSONArray; 
import com.hundsun.tamcx.system.ctl.HibernateBaseCtl; 
import com.hundsun.tamcx.util.HsException; 
public class BrowserFile  extends HibernateBaseCtl { 
@Override 
public void doControl() throws HsException { 
// TODO Auto-generated method stub 
PrintWriter out = null;   
String path = "";  
FileInfo info = null; 
try{ 
response.setContentType("text/html");   
response.setCharacterEncoding("UTF-8");   
out = response.getWriter();   
path = request.getParameter("path");   
path = path == null ? "" : URLDecoder.decode(path, "UTF-8");    
info = new FileInfo(); 
if(subTranCode.equals("getData")){ 
getData(out,path,info); 
}else if(subTranCode.equals("mkDir")){ 
mkDir(out,path); 
}else { 
} 
}catch(Exception e){ 
$Error(e.getMessage()); 
}finally{ 
out.flush();   
out.close(); 
} 
} 
private void mkDir(PrintWriter out,String path) throws UnsupportedEncodingException { 
// TODO Auto-generated method stub 
String dirName = request.getParameter("dirName");   
dirName = dirName == null ? "" : URLDecoder.decode(dirName, "UTF-8");   
boolean success = false;   
try {   
success = FileUtils.mkDir(path, dirName);   
FileInfo node = FileUtils.getFileInfo(new File(FileUtils.getDoPath(path) + dirName));   
out.print(JSONArray.fromObject(node));   
} catch (Exception e) {   
e.printStackTrace();   
success = false;   
}   
System.out.println(success); 
} 
private void getData(PrintWriter out,String path,FileInfo info) { 
// TODO Auto-generated method stub 
if ("root".equals(path)) {    
FileSystemView fsv = FileSystemView.getFileSystemView();   
File[] roots = fsv.getRoots(); //File.listRoots();   
//桌面   
for (File f : roots) {   
info.getChildren().add(FileUtils.getFileInfo(f));   
}   
for (File f : roots[0].listFiles()) { 
if (f.getName().contains("My Documents")) {   
info.getChildren().add(FileUtils.getFileInfo(f));   
}   
}   
FileInfo fileInfo = new FileInfo();   
fileInfo.setName("我的电脑");   
fileInfo.setPath("My Computer");  
for (File fi : roots[0].listFiles()[0].listFiles()) {   
fileInfo.getChildren().add(FileUtils.getFileInfo(fi));   
} 
info.getChildren().add(fileInfo);   
fileInfo = new FileInfo();   
fileInfo.setName("网上邻居");   
fileInfo.setPath("Network Place"); 
for (File fi : roots[0].listFiles()[1].listFiles()) { 
System.out.println("-----1"); 
fileInfo.getChildren().add(FileUtils.getFileInfo(fi)); 
} 
info.getChildren().add(fileInfo);   
System.out.println("-----2"); 
System.out.println(info.getChildren()); 
System.out.println("-----3"); 
System.out.println(JSONArray.fromObject(info.getChildren()).toString()); 
System.out.println("-----4"); 
out.print(JSONArray.fromObject(info.getChildren()).toString());  
System.out.println("-----7"); 
} else if (path != null && !"".equals(path)) { 
System.out.println("-----8"); 
FileUtils.getFileInfo(info, new File(path), new String[] {"*"});   
out.print(JSONArray.fromObject(info.getChildren()).toString()); 
System.out.println("-----9"); 
} 
} 
}

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13237.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论