上传多个文件,并按原有路径进行展示(springMVC+EasyUI)

一、上传文件,保存文件路径

上传图片中的文件
在这里插入图片描述

1、上传文件的jsp代码:

 <form action="${base}/system_appfile_structure/uploadFolder" enctype="multipart/form-data" method="post">
        <input type="hidden" name="project_id" value="${project_id}"/>
        <input id="dir" type="file" name="file" webkitdirectory mozdirectory/>
        <input id="uploadDir" type="submit" value="提交文件夹">
 </form>

2、后台service处理(保存文件的方法就不贴了,难点在出来文件夹层级上):

public void uploadFolder(Long project_id, MultipartFile[] file, HttpServletRequest request) throws Exception {
		Set set = new HashSet();
		for (MultipartFile f : file) {
			String parentName = "";
			//将文件保存到appfile表中
			Long appfile_id = fileUpload(f, request);
			if (f instanceof CommonsMultipartFile) {
				//转换成这个对象,然后我们需要通过里面的FileItem来获得相对路径
				CommonsMultipartFile f2 = (CommonsMultipartFile) f;
				String name = f2.getFileItem().getName();
				parentName = name.substring(0, name.lastIndexOf("/")+1);
				set.add(parentName);
			}
			AppFileStructureDomain domain = new AppFileStructureDomain();
			domain.setProject_id(project_id);
			domain.setAppfile_id(appfile_id);
			domain.setName(f.getOriginalFilename());
			domain.setParent_name(parentName);
			domain.setIs_root("N");
			domain.setFile_type(getExtension(f.getOriginalFilename()));
			appFileStructureDao.save(domain);
		}
		List<String> list = new ArrayList<String>(set);
		for (String str : list) {
			if (str.contains("/")) {
				List<Integer> indexList = searchAllIndex(str);
				if(indexList.size()==1){
					AppFileStructureDomain domain = new AppFileStructureDomain();
					domain.setProject_id(project_id);
					domain.setName(str.substring(0,indexList.get(0)));
					domain.setParent_id(-1L);
					domain.setIs_root("Y");
					domain.setFile_type("folder");
					appFileStructureDao.save(domain);
				}else {
					for(int i=0;i<indexList.size(); i++){
						if(i==0){
							continue;
						}
						String name = str.substring(indexList.get(i-1)+1,indexList.get(i));
						String parentName=str.substring(0,indexList.get(i-1)+1);
						AppFileStructureDomain domain = new AppFileStructureDomain();
						domain.setProject_id(project_id);
						domain.setName(name);
						domain.setParent_name(parentName);
						domain.setIs_root("N");
						domain.setFile_type("folder");
						Integer count = appFileStructureDao.getCount(domain);
						if(count==0){
							appFileStructureDao.save(domain);
						}
					}
				}
			}
		}
	}

两个小工具方法:

/**
	 * 获取文件类型
	 * @param fileName
	 * @return
	 */
	private String getExtension(String fileName) {
		return fileName.substring(fileName.lastIndexOf(".") + 1);
	}

	/**
	 * 获取文件夹‘/’所有的位置下标
	 * @param str
	 * @return
	 */
	private List<Integer> searchAllIndex(String str) {
		List<Integer> list = new ArrayList<Integer>();
		String key="/";
		int a = str.indexOf(key);//*第一个出现的索引位置
		while (a != -1) {
			list.add(a);
			a = str.indexOf(key, a + 1);//*从这个索引往后开始第一个出现的位置
		}
		return list;
	}

3、数据库文件结构

在这里插入图片描述

二、按原目录展示位树结构

1、前台发起请求

function treeGridInit() {
            $("#tblGrid").treegrid({
                mode: "remote",
                method: 'GET',
                url: '${base}/system_appfile_structure/createTreeGrid?is_root=Y&project_id='+${project_id},
                idField: "id",
                treeField: "name",
                singleSelect: true,
                border: false,
                toolbar: '#divToolbar',
                nowrap: false,
                fitColumns: true,
                fit: true,
                onLoadSuccess: function (row, data) {
                    $(this).treegrid("expandAll");
                }
            });
            $("#tblGrid").datagrid("resize");
        }

2、后台接收处理

public List<AppFileStructureDomain> createTreeGrid(AppFileStructureDomain domain) throws Exception {
        domain = appFileStructureDao.queryOne(domain);
		AppFileStructureDomain appFileStructureDomains = listAllFolder(domain.getName()+"/", domain.getProject_id(),domain);
		List<AppFileStructureDomain> tempList = new ArrayList<AppFileStructureDomain>();
        tempList.add(appFileStructureDomains);
		return tempList;
	}

    /**
     * 递归查询父目录的子文件
     * @param parent
     * @param project
     * @param parentDomain
     * @return
     */
	private AppFileStructureDomain listAllFolder(String parent,Long project,AppFileStructureDomain parentDomain){
		AppFileStructureDomain domain = new AppFileStructureDomain();
		domain.setParent_name(parent);
		domain.setProject_id(project);
		List<AppFileStructureDomain> queryList = appFileStructureDao.query(domain);
		parentDomain.setChildren(new ArrayList<AppFileStructureDomain>());
		parentDomain.getChildren().addAll(queryList);
		for(AppFileStructureDomain item : queryList){
			if("folder".equals(item.getFile_type())){
				listAllFolder(item.getParent_name()+item.getName()+"/",project,item);
			}
		}
		return parentDomain;
	}

3、最后效果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值