这是一个技术难题。
需求是:
有一个收费的下载链接,但是是基于用户成功下载才能进行收费。
可是如何判断用户是否成功下载呢?
找了很多的技术文档,没有结果。其中常见的一种方案是:
String file=request.getParameter("file");//物理文件路径
String filename=file;
if(file.startsWith("/"))
file=session.getServletContext().getRealPath(file);
if(file.indexOf("\\")>-1)
filename=file.substring(filename.lastIndexOf("\\")+1);
String err=null; String txt=null;
System.out.println("filename: "+filename);
byte data[]=null;
try{
InputStream inputStream = new FileInputStream(file); // 以byte流的方式打开文件 d:\1.gif
int i=inputStream.available(); //得到文件大小
data=new byte[i];
inputStream.read(data); //读数据
inputStream.close();
inputStream=null;
}catch(FileNotFoundException e){
err="无法在服务器上获取相关文件!文件不存在.";
}catch(Exception e){
err=e.getMessage();
}
System.out.println(filename);
if(data==null||err!=null){
if(txt!=null)
txt="请求的数据不是合法的二进制格式!";
else{
if(err==null)txt="无法从服务器获取相关文件,文件数据不存在或已经损坏.";
else txt=err;
}
String msg="无法下载文件:"+filename+"\\n"+txt;
return;
}
response.setContentType("application/octet-stream");
response.addHeader("Content-disposition" , "attachment;filename="+filename+"\"");
response.getOutputStream().write(data);
response.getOutputStream().close();
out.clear();
out = pageContext.pushBody();
data=null;
MD5 md=new MD5();
String ip=request.getRemoteHost();
System.out.println("下载成功!");
// 进行下载扣费
经过测试,发现这种方法不管客户端是否下载成功都会进行扣费,和
和下面的代码的执行效果是一样的
response.sendRedirect("dowloadfiel_url");
//进行扣费
但是我相信,WEB容器是肯定知道下载是否完成的,而且能够触发下载完成事件,否则,容器怎么知道什么时候停止向客户端发送数据流。
欢迎大家提供思路。
分享到:
相关推荐
这款客户端简化了在Windows平台上与OSS交互的过程,使得用户无需编程或使用命令行工具就能完成文件操作。 描述中提到,“输入accessKeyId和accessKeySecret即可像FTP一样从本地上传文件到oss中”。这说明了使用OSS...
4. 下载完成后,运行安装程序,按照向导指示进行安装。 安装完成后,你需要配置SVN客户端。在TortoiseSVN中,这通常涉及设置SVN服务器的URL,以及用户凭据(用户名和密码)。这些信息由你的项目管理员提供,或者...
- 断点续传:如果上传或下载过程中网络中断,客户端能记住进度并继续未完成的操作。 - 持续同步:可以设置客户端实时同步本地目录和OSS上的对应目录,保持数据一致性。 - 权限管理:用户可以设置不同级别的访问...
### 最新版Git客户端下载 #### 一、Git简介与重要性 Git 是一个分布式版本控制系统,用于跟踪在软件开发过程中对文件的修改。它最初由 Linus Torvalds 在 2005 年创建,旨在支持 Linux 内核的开发。Git 的核心功能...
通过iPhone手机办公客户端,员工可以在外出差、家中或是任何有网络的地方,轻松完成工作任务,提高生产力。同时,企业也能通过这种方式实现远程办公,降低运营成本,提升组织的灵活性。 总之,"iPhone手机办公...
3. **断点识别**:客户端需识别何时可以续传,例如,通过检查服务器的文件大小和本地已下载的部分来决定是否从头开始还是继续未完成的传输。 4. **错误处理和重试机制**:当网络问题导致传输中断时,客户端需要有...
4. 完成与通知:下载完成后,根据需求通知用户,如弹出通知或更新界面状态。 四、安全性与优化 1. 数据安全:在上传和下载过程中,确保数据传输的安全性,如使用HTTPS协议防止中间人攻击。 2. 断点续传:为了提高...
首先,用户需要下载并安装客户端程序,然后解压下载的客户端程序,双击并安装。安装完成后,用户需要单击“完成”以完成安装。 卸载 卸载DSS5000系列客户端需要按照一定的步骤进行。首先,用户需要选择“开始 > ...
7. 客户关系管理:对于销售团队,TQ客户端可能集成了CRM模块,便于管理客户资料,跟踪销售线索。 二、TQ客户端的技术特点: 1. 安全性:TQ客户端通常会采用加密技术保护用户数据安全,防止信息泄露。 2. 稳定性:...
该客户端是与Subversion(简称SVN)服务器紧密集成的,Subversion是一种开源的版本控制系统,用于跟踪文件和目录的更改,方便团队成员协作。 TortoiseSVN的最新版本为1.13.1.28686,提供了32位和64位两个版本,以...
8. **关闭连接**:完成所有操作后,客户端需要安全地关闭与FTP服务器的连接,释放资源。 在实现这些功能时,MFC提供了一系列的类和接口,如CInternetSession、CFTPConnection、CFTPFilePut和CFTPFileGet等,它们...
4. 安装完成后,SVN客户端将被添加到系统中,并且设置为中文界面。 5. 用户可以通过桌面快捷方式或开始菜单启动SVN客户端,开始进行版本控制操作。 SVN客户端的主要功能包括: 1. **版本库创建**:用户可以创建本地...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许团队成员协同工作,记录每次更改,以便于回滚错误,合并不同开发者的修改,并实现代码版本管理。在Windows环境下, SVN...
**GitHub for Mac 客户端** GitHub for Mac 是一款专为苹果Mac OS X操作系统设计的图形用户界面(GUI)工具,它使得用户可以更轻松地与GitHub进行交互,包括克隆仓库、创建分支、提交更改、推送代码以及管理Pull ...
1. **代码编辑器**:提供了一个全面的代码编辑环境,支持PL/SQL语法高亮、自动完成、错误检查、调试等功能,帮助用户编写、修改和调试数据库脚本。 2. **对象浏览器**:允许用户浏览和管理Oracle数据库中的所有对象...
4. **即时反馈与评分**:完成练习或模拟考试后,系统立即给出分数和答案解析,便于考生及时了解自己的学习状况。 5. **时间管理训练**:模拟真实考试时间限制,培养考生在有限时间内高效答题的能力。 二、机房...
在下载了包含汉化包的SVN客户端64位压缩包后,首先解压文件,然后运行安装程序。在安装过程中,根据提示选择合适的安装路径,确保勾选“安装汉化包”选项,这样客户端将在安装完成后自动应用中文界面。 4. 使用...
2. **克隆版本库**:在本地电脑上,通过TortoiseSVN的" Checkout "功能,输入服务器的URL,选择存放项目的本地目录,完成下载。 3. **日常操作**:在本地工作副本上进行编辑、添加、删除等操作后,使用" Commit ...
6. **SQL Profiler**:这是一个性能监视工具,用于跟踪SQL Server事件,如查询执行、索引使用和锁定问题。通过分析这些事件,用户可以识别性能瓶颈并优化数据库性能。 7. **数据库维护计划向导**:这个向导帮助用户...