客户端文件下载结束后怎样删除Server上临时文件 请教高人:在Download文件下载后,怎样删除存放在服务器上的临时文件?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我曾经用php做过这个。。那个文件属性啥的一定要改好。。否则删不掉。。 具体情形是这样的:从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()的话,会报文件不存在的错误,就是说还没有提示客户下载就已经将源文件删除了。 兄弟,我非常同意你的这种想法,我也尝试过,但是FileStreamInfo这个对象必须传一个File对象给她,如果是流的就好了,你有什么好办法吗? 我们的项目没有用Structs框架,所以可以直接在jsp中设置header,然后将文件写入输出流,不需要FileStreamInfo对象。按你的情况可能你只能按人家的规矩来了。这样的话这个思路你看是否可行.1.将生成的下载文件统一放到一特定目录。2.文件名称加上时间前缀3.用以特定线程最为GC,每隔一段时间扫描下目录将时间前缀与当前系统时间之差大于指定 时间间隔的文件作为垃圾文件删除这样你的程序就不要考虑临时文件删除的问题了,就像Java中不用考虑内存的问题一样,但弊端也是有的。如果你的站点访问量大的话可能垃圾文件一个时间间隔的文件增加也是很客观的。而且由于判断垃圾文件的方法比较简单,可能造成一个比较大的文件正在下载中却被当做垃圾删掉。所以这个办法是万不得已的办法,只能你的文件下载代码允许你修改,尽量修改代码来解决问题 不要用FileStreamInfo,方法还是很多的1.从action跳转到jsp/servlet中去做下载2.在action中直接用response向浏览器输出字节流,然后return null 网关通信 编程 有没有视频讲义或者书 Java访问共享文件问题 各位同学,有没有什么比较好的关于JAVA中Design Pattern的书推荐? 小女有难:如何处理CMD命令中的空格? jsp 调试 封装SWT,使其操作更为渐变。有意者加我QQ applet用到了特殊的archive文件后,在浏览器中为何无法浏览? 网络服务的问题???服务器程序不能正常运行。很奇怪的。。。 数组的传递问题 模拟登录评论,java 关于同一个类中不同方法相互调用的问题 JGraph做图
我曾经用php做过这个。。
那个文件属性啥的一定要改好。。否则删不掉。。
从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()的话,会报文件不存在的错误,就是说还没有提示客户下载就已经将源文件删除了。
不需要FileStreamInfo对象。按你的情况可能你只能按人家的规矩来了。这样的话这个思路你
看是否可行.
1.将生成的下载文件统一放到一特定目录。
2.文件名称加上时间前缀
3.用以特定线程最为GC,每隔一段时间扫描下目录将时间前缀与当前系统时间之差大于指定
时间间隔的文件作为垃圾文件删除这样你的程序就不要考虑临时文件删除的问题了,就像Java中不用考虑内存的问题一样,
但弊端也是有的。如果你的站点访问量大的话可能垃圾文件一个时间间隔的文件增加
也是很客观的。而且由于判断垃圾文件的方法比较简单,可能造成一个比较大的文件
正在下载中却被当做垃圾删掉。所以这个办法是万不得已的办法,只能你的文件下载代码
允许你修改,尽量修改代码来解决问题
1.从action跳转到jsp/servlet中去做下载
2.在action中直接用response向浏览器输出字节流,然后return null