确定文件下载完成的问题

Silen___wang 2015-04-14 11:27:44
我要实现的是,jsp页面上点击一个链接,弹出一个下载页面,显示下载或者取消,点击下载之后,数据库的操作记录加一,点击取消则不做操作。
现在的情况是,我只要点了那个链接,操作记录就会加一,不管后面点的是下载还是取消,而代码中已经将添加操作记录的语句加到out.close();之后了。
这边牵扯到一个判断文件是否下载成功的问题。想请教一下大家都是用的什么方法。
...全文
178 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
番茄鲨鱼面 2015-04-15
  • 打赏
  • 举报
回复
补充一点,貌似大文件会在下载完成后更新数据库记录,小文件会直接更新数据库记录(这里应该是因为IE的文件下载窗口在弹出的时候会预读文件)。 http://q.cnblogs.com/q/1947/
番茄鲨鱼面 2015-04-15
  • 打赏
  • 举报
回复
引用 2 楼 Silen___wang 的回复:
[quote=引用 1 楼 stubble 的回复:] 流写完了 基本就是下载ok了

OutputStream out = response.getOutputStream();
			fileinputstream = new FileInputStream(file);
			long l = file.length();
			int k = 0;
			byte abyte0[] = new byte[65000];
			response.setContentType("application/x-msdownload");
			response.setContentLength((int) l);
			response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
			while ((long) k < l) {
				int j;
				j = fileinputstream.read(abyte0, 0, 65000);
				k += j;
				out.write(abyte0, 0, j);
			}
			out.flush();
			out.close();
			if (map != null) {
				// 获取当前人员ID、姓名
				String webID= (String) map.get("webID");
				String userID= (String) map.get("userID");
				String userName= (String) map.get("userName");
				String file_id= (String) map.get("file_id");
				int doType=1;
				fileService.updateFileInfoAndLog(file_id, userID, userName, doType,webID);
			}
这是输出流那边的代码 我在最后一行fileService.updateFileInfoAndLog 加了断点做测试 页面上只要点了那个链接 不管你有没有点下载或者是取消 代码直接走到最后一行 我想要的是 当你点了下载之后 再执行那段代码[/quote] 我觉得是你只要下载页面弹出的时候,这个文件就已经写到了response中了,所以out.close()肯定执行了,并且fileService.updateFileInfoAndLog也肯定执行了,你所说的点击下载或者取消是浏览器的行为,和上面代码没有关系。 不知道这样对不对,请大家指正。
Silen___wang 2015-04-14
  • 打赏
  • 举报
回复
引用 1 楼 stubble 的回复:
流写完了 基本就是下载ok了

OutputStream out = response.getOutputStream();
			fileinputstream = new FileInputStream(file);
			long l = file.length();
			int k = 0;
			byte abyte0[] = new byte[65000];
			response.setContentType("application/x-msdownload");
			response.setContentLength((int) l);
			response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
			while ((long) k < l) {
				int j;
				j = fileinputstream.read(abyte0, 0, 65000);
				k += j;
				out.write(abyte0, 0, j);
			}
			out.flush();
			out.close();
			if (map != null) {
				// 获取当前人员ID、姓名
				String webID= (String) map.get("webID");
				String userID= (String) map.get("userID");
				String userName= (String) map.get("userName");
				String file_id= (String) map.get("file_id");
				int doType=1;
				fileService.updateFileInfoAndLog(file_id, userID, userName, doType,webID);
			}
这是输出流那边的代码 我在最后一行fileService.updateFileInfoAndLog 加了断点做测试 页面上只要点了那个链接 不管你有没有点下载或者是取消 代码直接走到最后一行 我想要的是 当你点了下载之后 再执行那段代码
异常异长 2015-04-14
  • 打赏
  • 举报
回复
流写完了 基本就是下载ok了
异常异长 2015-04-14
  • 打赏
  • 举报
回复
引用 2 楼 Silen___wang 的回复:
[quote=引用 1 楼 stubble 的回复:] 流写完了 基本就是下载ok了

OutputStream out = response.getOutputStream();
			fileinputstream = new FileInputStream(file);
			long l = file.length();
			int k = 0;
			byte abyte0[] = new byte[65000];
			response.setContentType("application/x-msdownload");
			response.setContentLength((int) l);
			response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
			while ((long) k < l) {
				int j;
				j = fileinputstream.read(abyte0, 0, 65000);
				k += j;
				out.write(abyte0, 0, j);
			}
			out.flush();
			out.close();
			if (map != null) {
				// 获取当前人员ID、姓名
				String webID= (String) map.get("webID");
				String userID= (String) map.get("userID");
				String userName= (String) map.get("userName");
				String file_id= (String) map.get("file_id");
				int doType=1;
				fileService.updateFileInfoAndLog(file_id, userID, userName, doType,webID);
			}
这是输出流那边的代码 我在最后一行fileService.updateFileInfoAndLog 加了断点做测试 页面上只要点了那个链接 不管你有没有点下载或者是取消 代码直接走到最后一行 我想要的是 当你点了下载之后 再执行那段代码[/quote] 因为你的流写完了 你可以在while中打断点

81,092

社区成员

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

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