客户端文件下载结束后怎样删除Server上临时文件

wang_yong 2009-10-30 05:46:48
请教高人:在Download文件下载后,怎样删除存放在服务器上的临时文件??
...全文
494 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_yong 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jdk150 的回复:]
不要用FileStreamInfo,方法还是很多的
1.从action跳转到jsp/servlet中去做下载
2.在action中直接用response向浏览器输出字节流,然后return null
[/Quote]
有没有现成的例子可以借鉴一下吗??
jdk150 2009-11-02
  • 打赏
  • 举报
回复
不要用FileStreamInfo,方法还是很多的
1.从action跳转到jsp/servlet中去做下载
2.在action中直接用response向浏览器输出字节流,然后return null
  • 打赏
  • 举报
回复
我们的项目没有用Structs框架,所以可以直接在jsp中设置header,然后将文件写入输出流,
不需要FileStreamInfo对象。按你的情况可能你只能按人家的规矩来了。这样的话这个思路你
看是否可行.
1.将生成的下载文件统一放到一特定目录。
2.文件名称加上时间前缀
3.用以特定线程最为GC,每隔一段时间扫描下目录将时间前缀与当前系统时间之差大于指定
时间间隔的文件作为垃圾文件删除

这样你的程序就不要考虑临时文件删除的问题了,就像Java中不用考虑内存的问题一样,
但弊端也是有的。如果你的站点访问量大的话可能垃圾文件一个时间间隔的文件增加
也是很客观的。而且由于判断垃圾文件的方法比较简单,可能造成一个比较大的文件
正在下载中却被当做垃圾删掉。所以这个办法是万不得已的办法,只能你的文件下载代码
允许你修改,尽量修改代码来解决问题
wang_yong 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xingqiliudehuanghun 的回复:]
为什么不直接写到输出流中呢,那样就不用考虑删除文件的问题了
[/Quote]
兄弟,我非常同意你的这种想法,我也尝试过,但是FileStreamInfo这个对象必须传一个File对象给她,如果是流的就好了,你有什么好办法吗?
zjhlht 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xingqiliudehuanghun 的回复:]
为什么不直接写到输出流中呢,那样就不用考虑删除文件的问题了
[/Quote]

同意
  • 打赏
  • 举报
回复
为什么不直接写到输出流中呢,那样就不用考虑删除文件的问题了
wang_yong 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 youthon 的回复:]
请说明具体条件吧
[/Quote]
具体情形是这样的:
从DB读取数据,在服务器导出Excel临时文件,download到客户端后,删除服务器上生成的那个临时Excel文件。
前面的操作现在都没有问题了(虽然还有不足),就是删除临时文件的操作,不知怎样来操作。
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

// 源文件路径
srcFilePath = servlet.getInitParameter("file-upload");

// 生成Excel文件
File file = createExcel();
System.out.println(file.getAbsolutePath());

// 设置下载新的文件名
String newFileName = Constants.FILE_NAME
+ CommonUtils.getDateFormat(Constants.DATE_YMDH24MS) + ".xls";
newFileName = new String(newFileName.getBytes("gbk"), "iso-8859-1");

// 设置方式:附件
response.setHeader("Content-disposition", "attachment; filename=" + newFileName);

// 设定下载文件类型
FileStreamInfo si = new FileStreamInfo("application/vnd.ms-excel", file);

return si;
}
这是download的代码,如果在这个方法的return前使用file.delete()的话,会报文件不存在的错误,就是说还没有提示客户下载就已经将源文件删除了。
littlemonster 2009-10-30
  • 打赏
  • 举报
回复

我曾经用php做过这个。。
那个文件属性啥的一定要改好。。否则删不掉。。
苍蝇①号 2009-10-30
  • 打赏
  • 举报
回复
不知道你的服务器端和客户端是怎么交互的
swandragon 2009-10-30
  • 打赏
  • 举报
回复
File
delete方法
弘石 2009-10-30
  • 打赏
  • 举报
回复
请说明具体条件吧

62,620

社区成员

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

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