欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javaweb上传文件夹

程序员文章站 2024-03-25 14:27:16
...

我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。

 

首先我们需要了解的是上传文件三要素:

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);
%>


工程截图
javaweb上传文件夹javaweb上传文件夹javaweb上传文件夹
功能介绍

  

树形目录导航。您可以通过树型目录导航和路径导航栏快速跳转到指定目录。在跳转后树型目录将会自动选中当前的目录。

javaweb上传文件夹

 

路径导航,点击根目录按钮便可返根目录

javaweb上传文件夹

 

文件和目录重命名

javaweb上传文件夹 
 

点击删除按钮

javaweb上传文件夹

点击确定后,页面中的文件消失


 

 

 

批量上传文件

javaweb上传文件夹 
 

粘贴上传

复制文件夹、文件或图片

javaweb上传文件夹

在页面中选择好相应的上传目录,点击粘贴上传按钮,数据即可快速开始上传

javaweb上传文件夹


 

 

 

批量上传文件和文件夹

javaweb上传文件夹 
 

 

文件和目录下载

javaweb上传文件夹

 

批量下载

同时选择多个需要下载的文件 

然后点击下载按钮,设置下载目录文件夹

javaweb上传文件夹


 

javaweb上传文件夹

 

点击全部下载,开始下载

javaweb上传文件夹

 

自动加载未上传完的任务。在刷新浏览器或重启电脑后仍然可以自动加载未完成的任务。

javaweb上传文件夹

 

 

下载完成后打开我们设置的下载目录文件夹,发现需下载的文件或文件夹确认已下载成功,经确认文件夹内的内容与下载文件夹内容一致

javaweb上传文件夹

数据库记录,支持SQL、MySQL、Oracle

javaweb上传文件夹javaweb上传文件夹

javaweb上传文件夹

 

控件包下载:
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