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多文件上传,解决了文件重名问题,希望对大家的学习有所帮助。