js+jsp+servlet实现一键上传文件夹中的所有文件.docx
《js+jsp+servlet实现一键上传文件夹中的所有文件.docx》由会员分享,可在线阅读,更多相关《js+jsp+servlet实现一键上传文件夹中的所有文件.docx(14页珍藏版)》请在冰豆网上搜索。
![js+jsp+servlet实现一键上传文件夹中的所有文件.docx](https://file1.bdocx.com/fileroot1/2023-1/2/73024d7a-cae2-436e-9c3a-1a1d34fc78d6/73024d7a-cae2-436e-9c3a-1a1d34fc78d61.gif)
js+jsp+servlet实现一键上传文件夹中的所有文件
JS+JSP+SERVLET实现一键上传文件夹下面的所有文件到数据库中
1、页面的Js代码:
functionfileupload(filepath){
if(filepath!
=""){
sendFileToServer(filepath);
}
else{
alert("请选择要上传的文件!
");
}
}
functioncallback(){
if(xmlhttp.readyState==4){
varresponseText=xmlhttp.responseText;
}
}
functionsendByteStreamToServer(stream,url){
if(window.XMLHttpRequest){
xmlhttp=newXMLHttpRequest();
if(xmlhttp.overrideMimeType){
xmlhttp.overrideMimeType("text/xml")
}
}elseif(window.ActiveXObject){
varactivexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for(vari=0;itry{
xmlhttp=newActiveXObject(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);
//alert(stream.size);
xmlhttp.send(stream);
}
functionsendFileToServer(filePath){
varfilepath=encodeURI(encodeURI(filePath));
varstream=newActiveXObject("ADODB.Stream");
stream.Type=1;
stream.Open();
stream.Position=0;//指定或返加对像内数据的当前指针。
stream.LoadFromFile(filePath)//将FileName指定的文件装入对像中,参数FileName为指定的用户名。
stream.Position=0;
varid=document.getElementById("appid").value;
sendByteStreamToServer(stream,"<%=request.getContextPath()%>/appmanager.do?
action=importdate&tag=3&cmd=yhjzqywGetDatazz&filePath="+filepath+"&id="+id);
stream.Close();
}
varcountfiles=0;
varcountfolders=0;
//用于打开浏览对话框,选择路径
functionBrowseFolder(){
try{
varMessage="请选择文件夹";//选择框提示信息
varShell=newActiveXObject("Shell.Application");
varFolder=Shell.BrowseForFolder(0,Message,0x0040,0x11);//起始目录为:
我的电脑
//varFolder=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+"\\";
}
//document.all.getfolder.value=Folder;
returnFolder;
}else{
Folder="";
returnFolder;
}
}
catch(e){
alert(e.message+"11");
}
}
//用于遍历
functiontraverse(localPath,textHtml){
varfso=newActiveXObject("Scripting.FileSystemObject");
varcurrentFolder=fso.GetFolder(localPath);
varfileList=newEnumerator(currentFolder.files);
varsubFolderList="";
varfileHtml=textHtml;
varaFile;
for(;!
fileList.atEnd();fileList.moveNext())
{
countfiles++;
aFile=fileList.item();
//fileHtml+="filename:
"+aFile.Name.substring(0,aFile.Name.lastIndexOf("."))+","
//fileHtml+="文件属性:
"+aFile.Attributes+",";
//fileHtml+="创建日期:
"+aFile.DateCreated+"
";
//fileHtml+="最后存取时间:
"+aFile.DateLastAccessed+"
";
//fileHtml+="最后修改时间:
"+aFile.DateLastModified+"
";
//fileHtml+="父目录:
"+aFile.ParentFolder+",";
//fileHtml+="path:
"+aFile.Path+",";
//fileHtml+=aFile.Path;
fileHtml.push(aFile.Path);
//fileHtml+="短文件名:
"+aFile.ShortName+",";
//fileHtml+="短路径:
"+aFile.ShortPath+",";
//fileHtml+="size:
"+aFile.Size+"
";
//fileHtml+="type:
"+aFile.Type+"
";
//fileHtml+="所在盘:
"+aFile.Drive+"
";
}
subFolderList=newEnumerator(currentFolder.SubFolders);
for(;!
subFolderList.atEnd();subFolderList.moveNext())
{
countfolders++;
//fileHtml+="chfile:
"+subFolderList.item().Path+"
";
fileHtml=traverse(subFolderList.item().Path,fileHtml)//递归遍历子文件夹
}
//fileHtml+="共遍历文件数:
"+countfiles+"
"+"共遍历文件夹数:
"+countfolders;
return(fileHtml);
}
functionbrowse(){
document.all.path.value=BrowseFolder();
}
functionviewfiles(){
//vartextHtml="";
vartextHtml=newArray();
vartextHtmls=newArray();
varfolderpath=document.all.path.value;
//document.getElementById("path").value=traverse(folderpath,textHtml);
//span.innerHTML=traverse(folderpath,textHtml)+"共遍历文件数:
"+countfiles+"
"+"共遍历文件夹数:
"+countfolders;
textHtmls=traverse(folderpath,textHtml);
for(vari=0;i<(textHtmls.length);i++){
fileupload(textHtmls[i])
//alert(textHtmls[i]);
//vartext='';
}
returntrue;
//span.innerHTML=traverse(folderpath,textHtml)+"共遍历文件数:
"+countfiles+"
"+"共遍历文件夹数:
"+countfolders;
}
varXMLHttpReq;
varcurrentSort;
//创建XMLHttpRequest对象
functioncreateXMLHttpRequest(){
if(window.XMLHttpRequest){//Mozilla浏览器
XMLHttpReq=newXMLHttpRequest();
}
elseif(window.ActiveXObject){//IE浏览器
try{
XMLHttpReq=newActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
XMLHttpReq=newActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}
}
//发送请求函数
functionsendRequest(url){
createXMLHttpRequest();
XMLHttpReq.open("POST",url,true);
XMLHttpReq.onreadystatechange=processResponse;//指定响应函数
XMLHttpReq.send(null);//发送请求
}
//处理返回信息函数
functionprocessResponse(){
if(XMLHttpReq.readyState==4){//判断对象状态
if(XMLHttpReq.status==200){//信息已经成功返回,开始处理信息
getdate();
}else{//页面不正常
alert("您所请求的页面有异常。
");
}
}
}
functiongetdate(){
varres=XMLHttpReq.responseXML.getElementsByTagName("res");
for(vari=0;ivarmsg=res[i].firstChild.data;
//alert("---"+msg);
if(msg>0){
varpath=document.getElementById("path").value;
//alert(path);
if(path.length==0){
alert("请选择文件或文件夹!
");
return;
}else{
//document.forms[0].submit();
if(viewfiles()){
alert("导入数据成功");
window.location.href="<%=request.getContextPath()%>/appmanager.do?
action=viewapp&id=<%=id%>";
}
}
}else{
alert("修改失败");
return;
}
}
}
functionsubmits(tag){
varvalue="";
varappid=document.getElementById("appid").value;
vardyndata=document.getElementsByName("Dyndata");
for(vari=0;iif(dyndata[i].checked==true){
value=dyndata[i].value;
break;
}
}
varstate=document.getElementById("state").value;
if(state==1||state==3||state==4||state==5){
alert("对不起!
此数据已经提交不能修改或再次提交!
");
returnfalse;
}else{
varissueTime=document.getElementById("issueTime").value;
varwhenlong=document.getElementById("whenlong").value;
sendRequest("<%=request.getContextPath()%>/appmanager.do?
action=viewapp&type=ajax&appid="+appid+"&dyndata="+value+"&issueTime="+issueTime+"&whenlong="+whenlong+"&state="+tag);
//document.getElementById("action").value="editor";
//document.forms[0].submit();
}
}
2、Html代码
3、Servlet处理代码
intid=Integer.parseInt(request.getParameter("id"));
//System.out.println("id========"+id);
//Stringfilepath=newString(request.getParameter("filePath").getBytes("ISO-8859-1"),"utf-8");
Stringfilepath=.URLDecoder.decode(request.getParameter("filePath"),"UTF-8");
Stringfilename=filepath.substring(filepath.lastIndexOf("\\")+1);
//System.out.println(filepath+"--------"+filename+"-----------"+request.getParameter("filePath"));
//StringloadPath=getServletContext().getRealPath(System.getProperties().getProperty("file.separator"))+"upload_files"+System.getProperties().getProperty("file.separator");//上传文件存放目录
StringloadPath=request.getSession().getServletContext().getRealPath("dest")+"\\";
//System.out.println(loadPath+"--------"+loadPath);
GetFileSizeg=newGetFileSize();//这个是我自己写的一个获取文件大小的工具类
InputStreamin=request.getInputStream();
BufferedInputStreambis=newBufferedInputStream(in);
//StringtempPath=(String)request.getSession().getAttribute("tempPath");
//if(tempPath==null||tempPath==""){
//tempPath=UUID.randomUUID().toString();
//request.getSession().setAttribute("tempPath",tempPath);
//}
//StringloadPaths=loadPath;
//loadPath=loadPath+tempPath+System.getProperties().getProperty("file.separator");
Filefile=newFile(loadPath);
//判断文件夹是否存在
if(!
file.exists()){
file.mkdirs();
}
BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(newFile(loadPath+filename)));
intb=0;
//读取文件
while((b=bis.read())!
=-1){
//保存到服务器上面一个指定的文件夹中
bos.write(b);
bos.flush();
}
bis.close();//关闭流
bos.close();//关闭流
in.close();
longsize=0;
try{
Filefi=newFile(loadPath+filename);
size=g.getFileSizes(fi);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
Stringformat=filename.substring(filename.indexOf("."));
format=format.substring(1,format.length());
inttype=g.getfiletype(format);
Stringstr1=filepath.substring(filepath.indexOf("t\\")+2);
Stringpaths=str1.substring(0,str1.lastIndexOf("\\")+1);
//System.out.println("filename="+filename.substring(0,filename.indexOf("."))+"size=="+g.FormetFileSize(size)+"path="+paths+"format="+format+"type="+type+"id="+id);
//这个方法就是我将文件保存进mysql数据库的方法mak=OperatorManagerDao.getAppMsg().saveBinaryFile(filename.substring(0,filename.indexOf(".")),loadPath+filename,paths,format,g.FormetFileSize(size),type,id);
//这个方法也是我自己写的删除上传到服务器上面的这些文件
StringUtil.delFolder(loadPath);
4、保存进数据库的方法:
//保存上传或者导入的数据到资源表中
@Override
publicbooleansaveBinaryFile(Stringfilename,StringSource,Stringpath,
Stringformat,Stringsize,inttype,intappId){
booleana=false;
try{
//System.out.println(Source);
Filefile=newFile(Source);
FileInputStreamfis=newFileInputStream(file);
Stringsql="insertintoSourcesTab(name,Source,path,Format,type,Size,app_id)values(?
?
?
?
?
?
?
)";
conn=DBUtil.getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1,filename);
ps.setBinaryStream(2,fis,fis.available());
ps.setString(3,path);
ps.setString(4,format);
ps.setInt(5,