java实现动态上传多个文件并解决文件重名问题
本文分为两大方面进行讲解:
一、java实现动态上传多个文件
二、解决文件重命名问题java
供大家参考,具体内容如下
1、动态上传多个文件
<formname="xx"action="<c:urlvalue='/Up3Servlet'/>"method="post"enctype="multipart/form-data"> <tableid="tb"border="1"> <tr> <td> File: </td> <td> <inputtype="file"name="file"> <buttononclick="_del(this);">删除</button> </td> </tr> </table> <br/> <inputtype="button"onclick="_submit();"value="上传"> <inputonclick="_add();"type="button"value="增加"> </form> </body> <scripttype="text/javascript"> function_add(){ vartb=document.getElementById("tb"); //写入一行 vartr=tb.insertRow(); //写入列 vartd=tr.insertCell(); //写入数据 td.innerHTML="File:"; //再声明一个新的td vartd2=tr.insertCell(); //写入一个input td2.innerHTML='<inputtype="file"name="file"/><buttononclick="_del(this);">删除</button>'; } function_del(btn){ vartr=btn.parentNode.parentNode; //alert(tr.tagName); //获取tr在table中的下标 varindex=tr.rowIndex; //删除 vartb=document.getElementById("tb"); tb.deleteRow(index); } function_submit(){ //遍历所的有文件 varfiles=document.getElementsByName("file"); if(files.length==0){ alert("没有可以上传的文件"); returnfalse; } for(vari=0;i<files.length;i++){ if(files[i].value==""){ alert("第"+(i+1)+"个文件不能为空"); returnfalse; } } document.forms['xx'].submit(); } </script> </html>
遍历所有要上传的文件
2、解决文件的重名的问题
packagecn.hx.servlet; importjava.io.File; importjava.io.IOException; importjava.io.PrintWriter; importjava.util.ArrayList; importjava.util.List; importjava.util.UUID; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.commons.fileupload.FileItem; importorg.apache.commons.fileupload.disk.DiskFileItemFactory; importorg.apache.commons.fileupload.servlet.ServletFileUpload; importorg.apache.commons.io.FileUtils; publicclassUpImgServletextendsHttpServlet{ publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ request.setCharacterEncoding("UTF-8"); Stringpath=getServletContext().getRealPath("/up"); DiskFileItemFactorydisk= newDiskFileItemFactory(1024*10,newFile("d:/a")); ServletFileUploadup=newServletFileUpload(disk); try{ List<FileItem>list=up.parseRequest(request); //只接收图片*.jpg-iamge/jpege.,bmp/imge/bmp,png, List<String>imgs=newArrayList<String>(); for(FileItemfile:list){ if(file.getContentType().contains("image/")){ StringfileName=file.getName(); fileName=fileName.substring(fileName.lastIndexOf("\\")+1); //获取扩展 StringextName=fileName.substring(fileName.lastIndexOf("."));//.jpg //UUID Stringuuid=UUID.randomUUID().toString().replace("-",""); //新名称 StringnewName=uuid+extName;//在这里用UUID来生成新的文件夹名字,这样就不会导致重名 FileUtils.copyInputStreamToFile(file.getInputStream(), newFile(path+"/"+newName)); //放到list imgs.add(newName); } file.delete(); } request.setAttribute("imgs",imgs); request.getRequestDispatcher("/jsps/imgs.jsp").forward(request,response); }catch(Exceptione){ e.printStackTrace(); } } }
以上实现了java多文件上传,解决了文件重名问题,希望对大家的学习有所帮助。