我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。
首先我们需要了解的是上传文件三要素:
1.表单提交方式:post (get方式提交有大小限制,post没有)
2.表单的enctype属性:必须设置为multipart/form-data.
3.表单必须有文件上传项:file,且文件项需要给定name值
上传文件夹需要增加一个属性webkitdirectory,像这样:
<input id="fileFolder" name="fileFolder" type="file" webkitdirectory>
部分文件块处理代码:
<%@ page language="java" import="up6.DBFile" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=UTF-8"%> <%@ page import="up6.FileBlockWriter" %> <%@ page import="up6.XDebug" %> <%@ page import="up6.*" %> <%@ page import="up6.biz.*" %> <%@ page import="org.apache.commons.fileupload.FileItem" %> <%@ page import="org.apache.commons.fileupload.FileItemFactory" %> <%@ page import="org.apache.commons.fileupload.FileUploadException" %> <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %> <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %> <%@ page import="org.apache.commons.lang.*" %> <%@ page import="java.net.URLDecoder"%> <%@ page import="java.util.Iterator"%> <%@ page import="net.sf.json.JSONObject"%> <%@ page import="java.util.List"%> <% out.clear(); /* 此页面负责将文件块数据写入文件中。 此页面一般由控件负责调用 参数: uid idSvr md5 lenSvr pathSvr RangePos fd_idSvr fd_lenSvr 更新记录: 2012-04-12 更新文件大小变量类型,增加对2G以上文件的支持。 2012-04-18 取消更新文件上传进度信息逻辑。 2012-10-25 整合更新文件进度信息功能。减少客户端的AJAX调用。 2014-07-23 优化代码。 2015-03-19 客户端提供pathSvr,此页面减少一次访问数据库的操作。 2016-04-09 优化文件存储逻辑,增加更新文件夹进度逻辑 2017-07-13 取消数据库操作 2017-10-23 增加删除文件块缓存操作 */ //String path = request.getContextPath(); //String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String uid = request.getHeader("uid");// String id = request.getHeader("id"); String lenSvr = request.getHeader("lenSvr"); String lenLoc = request.getHeader("lenLoc"); String blockOffset = request.getHeader("blockOffset"); String blockSize = request.getHeader("blockSize"); String blockIndex = request.getHeader("blockIndex"); String blockMd5 = request.getHeader("blockMd5"); String complete = request.getHeader("complete"); String pathSvr = ""; //参数为空 if( StringUtils.isBlank( uid ) || StringUtils.isBlank( id ) || StringUtils.isBlank( blockOffset )) { XDebug.Output("param is null"); return; } // Check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(request); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List files = null; try { files = upload.parseRequest(request); } catch (FileUploadException e) {// 解析文件数据错误 out.println("read file data error:" + e.toString()); return; } FileItem rangeFile = null; // 得到所有上传的文件 Iterator fileItr = files.iterator(); // 循环处理所有文件 while (fileItr.hasNext()) { // 得到当前文件 rangeFile = (FileItem) fileItr.next(); if(StringUtils.equals( rangeFile.getFieldName(),"pathSvr")) { pathSvr = rangeFile.getString(); pathSvr = PathTool.url_decode(pathSvr); } } boolean verify = false; String msg = ""; String md5Svr = ""; long blockSizeSvr = rangeFile.getSize(); if(!StringUtils.isBlank(blockMd5)) { md5Svr = Md5Tool.fileToMD5(rangeFile.getInputStream()); } verify = Integer.parseInt(blockSize) == blockSizeSvr; if(!verify) { msg = "block size error sizeSvr:" + blockSizeSvr + "sizeLoc:" + blockSize; } if(verify && !StringUtils.isBlank(blockMd5)) { verify = md5Svr.equals(blockMd5); if(!verify) msg = "block md5 error"; } if(verify) { //保存文件块数据 FileBlockWriter res = new FileBlockWriter(); //仅第一块创建 if( Integer.parseInt(blockIndex)==1) res.CreateFile(pathSvr,Long.parseLong(lenLoc)); res.write( Long.parseLong(blockOffset),pathSvr,rangeFile); up6_biz_event.file_post_block(id,Integer.parseInt(blockIndex)); JSONObject o = new JSONObject(); o.put("msg", "ok"); o.put("md5", md5Svr); o.put("offset", blockOffset);//基于文件的块偏移位置 msg = o.toString(); } rangeFile.delete(); out.write(msg); %>
工程截图
功能介绍
树形目录导航。您可以通过树型目录导航和路径导航栏快速跳转到指定目录。在跳转后树型目录将会自动选中当前的目录。
路径导航,点击根目录按钮便可返根目录
文件和目录重命名
点击删除按钮
点击确定后,页面中的文件消失
批量上传文件
粘贴上传
复制文件夹、文件或图片
在页面中选择好相应的上传目录,点击粘贴上传按钮,数据即可快速开始上传
批量上传文件和文件夹
文件和目录下载
批量下载
同时选择多个需要下载的文件
然后点击下载按钮,设置下载目录文件夹
点击全部下载,开始下载
自动加载未上传完的任务。在刷新浏览器或重启电脑后仍然可以自动加载未完成的任务。
下载完成后打开我们设置的下载目录文件夹,发现需下载的文件或文件夹确认已下载成功,经确认文件夹内的内容与下载文件夹内容一致
数据库记录,支持SQL、MySQL、Oracle
控件包下载:
cab(x86):http://t.cn/Ai9pmG8S
cab(x64):http://t.cn/Ai9pm04B
xpi:http://t.cn/Ai9pubUc
crx:http://t.cn/Ai9pmrcy
exe:http://t.cn/Ai9puobe
示例下载:
jsp-eclipse:http://t.cn/Ai9p3LSx
jsp-myeclipse:http://t.cn/Ai9p3IdC
在线教程:
jsp-文件管理器教程:http://j.mp/2WJ2Y1m