本文分为两大方面进行讲解:
一、java实现动态上传多个文件
二、解决文件重命名问题java
供大家参考,具体内容如下
1、动态上传多个文件
- <form name="xx" action="<c:url value='/Up3Servlet'/>" method="post" enctype="multipart/form-data">
- <table id="tb" border="1">
- <tr>
- <td>
- File:
- </td>
- <td>
- <input type="file" name="file">
- <button onclick="_del(this);">删除</button>
- </td>
- </tr>
- </table>
- <br/>
- <input type="button" onclick="_submit();" value="上传">
- <input onclick="_add();" type="button" value="增加">
- </form>
- </body>
- <script type="text/javascript">
- function _add(){
- var tb = document.getElementById("tb");
- //写入一行
- var tr = tb.insertRow();
- //写入列
- var td = tr.insertCell();
- //写入数据
- td.innerHTML="File:";
- //再声明一个新的td
- var td2 = tr.insertCell();
- //写入一个input
- td2.innerHTML='<input type="file" name="file"/><button onclick="_del(this);">删除</button>';
- }
- function _del(btn){
- var tr = btn.parentNode.parentNode;
- //alert(tr.tagName);
- //获取tr在table中的下标
- var index = tr.rowIndex;
- //删除
- var tb = document.getElementById("tb");
- tb.deleteRow(index);
- }
- function _submit(){
- //遍历所的有文件
- var files = document.getElementsByName("file");
- if(files.length==0){
- alert("没有可以上传的文件");
- return false;
- }
- for(var i=0;i<files.length;i++){
- if(files[i].value==""){
- alert("第"+(i+1)+"个文件不能为空");
- return false;
- }
- }
- document.forms['xx'].submit();
- }
- </script>
- </html>
复制代码
遍历所有要上传的文件
2、解决文件的重名的问题
- package cn.hx.servlet;
- import java.io.File;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.UUID;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.fileupload.FileItem;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import org.apache.commons.io.FileUtils;
- public class UpImgServlet extends HttpServlet {
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- String path = getServletContext().getRealPath("/up");
- DiskFileItemFactory disk =
- new DiskFileItemFactory(1024*10,new File("d:/a"));
- ServletFileUpload up = new ServletFileUpload(disk);
- try{
- List<FileItem> list = up.parseRequest(request);
- //只接收图片*.jpg-iamge/jpege.,bmp/imge/bmp,png,
- List<String> imgs = new ArrayList<String>();
- for(FileItem file :list){
- if(file.getContentType().contains("image/")){
- String fileName = file.getName();
- fileName = fileName.substring(fileName.lastIndexOf("\")+1);
-
- //获取扩展
- String extName = fileName.substring(fileName.lastIndexOf("."));//.jpg
- //UUID
- String uuid = UUID.randomUUID().toString().replace("-", "");
- //新名称
- String newName = uuid+extName; //在这里用UUID来生成新的文件夹名字,这样就不会导致重名
-
-
- FileUtils.copyInputStreamToFile(file.getInputStream(),
- new File(path+"/"+newName));
- //放到list
- imgs.add(newName);
- }
- file.delete();
- }
- request.setAttribute("imgs",imgs);
- request.getRequestDispatcher("/jsps/imgs.jsp").forward(request, response);
- }catch(Exception e){
- e.printStackTrace();
- }
-
- }
- }
复制代码
以上实现了java多文件上传,解决了文件重名问题,希望对大家的学习有所帮助。 |