文件夹上传功能

       前一段时间,接到一个需求。要求在客户端选择一文件夹,然后将整个文件夹一起上传。在网上找了些资料也不尽详细,就自己整理了一份。

页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>UpLoad</title>
<script type="text/javascript" >
function fileupload(filepath){  
if(filepath!=""){    
sendFileToServer(filepath);  
}  else{  
alert("请选择要上传的文件");  

}
function callback() {   
if (xmlhttp.readyState == 4) {       
var responseText = xmlhttp.responseText;          
}
}
function sendByteStreamToServer(stream,url){  
if (window.XMLHttpRequest) {      
xmlhttp = new XMLHttpRequest();       
if (xmlhttp.overrideMimeType) {          
xmlhttp.overrideMimeType("text/xml")      
}  
} else if (window.ActiveXObject) {       
var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];      
for (var i = 0; i < activexName.length; i++) {          
try {              
xmlhttp = new ActiveXObject(activexName[i]);              
break;          
} catch(e) {               
e.print()          
}    


xmlhttp.onreadystatechange = callback;  
xmlhttp.open("post", url, false);  
boundary="abcd"  
xmlhttp.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
xmlhttp.setRequestHeader("Content-Length", stream.Size); 
xmlhttp.send(stream); 
}
function sendFileToServer(filePath){     
var filepath=encodeURI(encodeURI(filePath));    
var stream =new ActiveXObject("ADODB.Stream");     
stream.Type=1;     
stream.Open();     
stream.Position = 0;//指定或返加对像内数据的当前指针。
stream.LoadFromFile(filePath) //将FileName指定的文件装入对像中,参数FileName为指定的用户名
stream.Position = 0;
sendByteStreamToServer(stream,"<%=request.getContextPath() %>/upLoad.do?path="+filepath);//请求路径
stream.Close();
}
var countfiles=0;
var countfolders=0;
//用于打开浏览对话框选择路径
function BrowseFolder(){
try{   
var Message = "请选择文件夹"; //选择框提示信息
var Shell = new ActiveXObject( "Shell.Application" );   
var Folder = Shell.BrowseForFolder(0,Message,0x0040,0x11);//起始目录为我的电脑
//var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为桌面
 if(Folder != null){
Folder = Folder.items(); // 返回 FolderItems 对象 
Folder = Folder.item(); // 返回 Folderitem 对象
Folder = Folder.Path; // 返回路径
if(Folder.charAt(Folder.length-1) != "\\"){
Folder = Folder + "\\";   
}
return Folder;
}else{      
Folder=""; 
return Folder;  

} catch(e){     
alert(e.message+"11"); 
}
}
//用于遍历
function traverse(localPath,textHtml){ 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var currentFolder = fso.GetFolder(localPath);   
var fileList = new Enumerator(currentFolder.files);   
var subFolderList = "";   
var fileHtml=textHtml;   
var aFile;      
for (; !fileList.atEnd(); fileList.moveNext()) { 
countfiles++;   
aFile=fileList.item();
fileHtml.push(aFile.Path);
}
subFolderList = new Enumerator(currentFolder.SubFolders); 
for (; !subFolderList.atEnd(); subFolderList.moveNext())   { 
countfolders++;
 fileHtml=traverse(subFolderList.item().Path,fileHtml)//递归遍历子文件夹  
}
return(fileHtml);
}
function showDiv(){
document.getElementById('loadStyle').style.display='inline';
}
function browse(){
showDiv(); 
document.all.path.value=BrowseFolder();
if(viewfiles()){
document.getElementById('loadStyle').style.display='none';
alert("文件上传成功");
}//上传文件
}

function viewfiles(){
var ts = document.getElementById('loadStyle');
var flag = true;
var textHtml = new Array(); 
var textHtmls = new Array(); 
var folderpath=document.all.path.value;
if(folderpath == ''){
document.getElementById('loadStyle').style.display='none';
flag = false;
}else{
setTimeout("showDiv()",2000);
textHtmls=traverse(folderpath,textHtml);
for(var i=0;i<(textHtmls.length);i++){    
fileupload(textHtmls[i]);
ts.innerHTML = textHtmls[i] + "<br/>";
}  
flag = true;
}
return flag;
}
 </script>


</head>
<body>
<input type="text" id="path" name="path">
<input type="button" value="选择" οnclick="browse()">
<div style="display: none;" id="loadStyle">
文件上传中
</div>
</body>
</html>


后台java脚本如下:


public class Upload extends Action {


@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setContentType("text/plain");
PrintWriter outNet = response.getWriter(); 

int id = Integer.parseInt(request.getParameter("id"));
String filePath = java.net.URLDecoder.decode(request.getParameter("path"),"UTF-8");
String fileName = filePath.substring(filePath.lastIndexOf("\\") +1);
String loadPath = "E:\\demo\\test\\";    //将要上传到的路径。
InputStream in = request.getInputStream();
BufferedInputStream bis = new BufferedInputStream(in);
File file = new File(loadPath);
if(!file.exists()){
file.mkdir();
}
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(loadPath + fileName)));
int b = 0;
while((b = bis.read()) != -1){
bos.write(b);
bos.flush();
}
bis.close();
bos.close();
in.close();
System.out.println("文件上传成功");
return null;
}


PS:

          web配置没有附上,大神们自己写就行了!这个不难!

 由于对于安全考虑,浏览器默认会关闭ActiveX,需要将你的站点设置为可信再点方可使用该功能,否则会报错说没有权限。

   所以,各位依需要选择。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值