文件上传过程中出现错误,如何把生成的临时文件删除

shf156184623 2009-08-17 02:55:54
在上传大文件时,会在硬盘上产生一个.tmp结尾的临时文件,上传完毕这个临时文件会自动删除,但如果在上传的过程中我把页面关掉了(会在List<?> items = upload.parseRequest(request);
处产生异常),这个临时文件没有自动删除,请问大家该如何解决? 代码如下

DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold(1024*1024);
// 设置临时文件存储位置
String tempPath = "d:/upload/temp";
File tp = new File(tempPath);
if(!tp.exists())
tp.mkdirs();
factory.setRepository(tp);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置单个文件的最大上传值
upload.setFileSizeMax(1000*1024*1024);
// 设置整个request的最大值
upload.setSizeMax(1000*1024*1024);
upload.setHeaderEncoding("UTF-8");
FileItem item = null;
try {
List<?> items = upload.parseRequest(request);


//设置文件存储位置
String filePath = "d:/upload/file";
File fp = new File(filePath);
if(!fp.exists())
fp.mkdirs();
String fileName = null;
for (int i = 0 ;i < items.size(); i++){
item = (FileItem) items.get(i);
fileName = filePath + File.separator + item.getName();
// 保存文件
if (!item.isFormField() && item.getName().length() > 0) {
item.write(new File(fileName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

...全文
622 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱好代码 2011-06-29
  • 打赏
  • 举报
回复
我也顶,遇到同样问题
shf156184623 2009-08-17
  • 打赏
  • 举报
回复
我顶!
shf156184623 2009-08-17
  • 打赏
  • 举报
回复
咋没人回答了? 小弟着急啊,对各位大侠的帮助,在下不胜感激!
shf156184623 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lcj_up 的回复:]
} catch (Exception e) {
            e.printStackTrace();
        }
下面加上

finally {
    //    删除文件的代码
}

你可以将整个TEMP文件夹删除
[/Quote]
这样处理太暴力了吧,如果同时有两个人上传大文件,会生成两个临时文件,其中一个人的出问题了就删除整个temp文件夹,那另一个人的也无法上传了啊!
lcj_up 2009-08-17
  • 打赏
  • 举报
回复
} catch (Exception e) {
e.printStackTrace();
}
下面加上

finally {
// 删除文件的代码
}

你可以将整个TEMP文件夹删除
shf156184623 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bea_java 的回复:]
引用 1 楼 zjf0921 的回复:
} catch (Exception e) {
            e.printStackTrace();
        }
下面加上

finally {
    //    删除文件的代码
}


上传玩了以后  在finally将临时文件删除就  OK...
[/Quote]

与二楼说的一样!
bea_java 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zjf0921 的回复:]
} catch (Exception e) {
            e.printStackTrace();
        }
下面加上

finally {
    //    删除文件的代码
}
[/Quote]

上传玩了以后 在finally将临时文件删除就 OK...
shf156184623 2009-08-17
  • 打赏
  • 举报
回复
如果能得到这个临时文件的名字就好办了,但怎么能得到这个临时文件的名字呢?
shf156184623 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zjf0921 的回复:]
} catch (Exception e) {
            e.printStackTrace();
        }
下面加上

finally {
    //    删除文件的代码
}
[/Quote]

关键是这段删除文件的代码怎么写啊?
zjf0921 2009-08-17
  • 打赏
  • 举报
回复
} catch (Exception e) {
e.printStackTrace();
}
下面加上

finally {
// 删除文件的代码
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧