session存值的问题,大家进来看下啊。

下面这段代码就是个上传的功能,现在是这样的,比如我连续上传3个文件a.doc,b.doc,c.doc,然后用 session.setAttribute("filespath",str);
把名称存下来,可是每次存的都是c.doc,我看了下,应该是在session里面,每次上传都把前一个的文件名称给覆盖了,所以都保存的是最后一个名称,我想把这3个名称都保存下来。。。。大家看下啊。

我在别的页面上去掉用
String zlfielpath = (String)session.getAttribute("filespath");
[code="java"]
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();
    }


}

[/code]

不可能的,你去打印一下items 跟 pathList 的size 肯定不是1 是1的话 那肯定取出来的是一条记录 你debug一下

你这个问题,我来给你解决 :D
在你往session里放属性的时候,放一个文件路径的Attribute可以,但是多个的话,肯定保存的是最后一个,怎么办呢?放集合呗,问题不就解决了?

修改后的代码:

[code="java"]
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);

[/code]

页面上拿List 之后再去取具体要那个文件的path

从楼主的情况可以看出来每次执行的时候执行了楼上给的程序,所以造成的结果是每次执行的list都是只有一个结果,分别是 a,b,c,到最后一个的时候仍然list中只有一个结果,这个结果里还是最后的一个。

如果是这种情况的话不如每次从session里取出对应的list并添加下一个。或者你的list放在全局变量中(这种方式要仔细考量)。

不过楼上的意思已经能表达到了,就是想办法用集合的方式保存。