问题描述
下面这段代码就是个上传的功能,现在是这样的,比如我连续上传3个文件a.doc,b.doc,c.doc,然后用 session.setAttribute("filespath",str);把名称存下来,可是每次存的都是c.doc,我看了下,应该是在session里面,每次上传都把前一个的文件名称给覆盖了,所以都保存的是最后一个名称,我想把这3个名称都保存下来。。。。大家看下啊。我在别的页面上去掉用String zlfielpath = (String)session.getAttribute("filespath");public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session = request.getSession();DiskFileItemFactory factory = new DiskFileItemFactory();// 设置内存缓冲区,超过后写入临时文件factory.setSizeThreshold(10240000);// 设置临时文件存储位置 String root = request.getRealPath("")+"\upwordzl"; String saveurl=root+"\";File file = new File(saveurl);if(!file.exists())//file.mkdirs(); 创建文件夹factory.setRepository(file);ServletFileUpload upload = new ServletFileUpload(factory);// 设置单个文件的最大上传值upload.setFileSizeMax(10002400000l);// 设置整个request的最大值upload.setSizeMax(10002400000l);upload.setHeaderEncoding("UTF-8");try {List<?> items = upload.parseRequest(request);FileItem item = null;String fileName = null;String str = "";for (int i = 0 ;i < items.size(); i++){item = (FileItem) items.get(i);fileName = saveurl + File.separator + item.getName();// 保存文件if (!item.isFormField() && item.getName().length() > 0) {item.write(new File(fileName));str =item.getName()+"★";}} session.setAttribute("filespath",str);//保存名称, } catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}} 问题补充:梦中有你 写道
解决方案
不可能的,你去打印一下items 跟 pathList 的size 肯定不是1 是1的话 那肯定取出来的是一条记录 你debug一下
解决方案二:
从楼主的情况可以看出来每次执行的时候执行了楼上给的程序,所以造成的结果是每次执行的list都是只有一个结果,分别是 a,b,c,到最后一个的时候仍然list中只有一个结果,这个结果里还是最后的一个。如果是这种情况的话不如每次从session里取出对应的list并添加下一个。或者你的list放在全局变量中(这种方式要仔细考量)。不过楼上的意思已经能表达到了,就是想办法用集合的方式保存。
解决方案三:
你这个问题,我来给你解决 在你往session里放属性的时候,放一个文件路径的Attribute可以,但是多个的话,肯定保存的是最后一个,怎么办呢?放集合呗,问题不就解决了?修改后的代码: try { List<?> items = upload.parseRequest(request); FileItem item = null; String fileName = null; String str = ""; //声明一个List来放所有上传文件的path List pathList = new ArrayList(); for (int i = 0 ;i < items.size(); i++){ item = (FileItem) items.get(i); fileName = saveurl + File.separator + item.getName(); // 保存文件 if (!item.isFormField() && item.getName().length() > 0) { item.write(new File(fileName)); str =item.getName()+"★"; //往里添加item的path pathList.add(str); } } // session.setAttribute("filespath",str);//保存名称,session.setAttribute("filespath",pathList);页面上拿List 之后再去取具体要那个文件的path