下面这段代码就是个上传的功能,现在是这样的,比如我连续上传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放在全局变量中(这种方式要仔细考量)。
不过楼上的意思已经能表达到了,就是想办法用集合的方式保存。