昨天做一个SSH整合的网盘上传下载系统,当点击文件下载链接时我想实现在点击确定下载后,数据库中该文件下载次数就 + 1,若取消下载,数据库该文件下载次数就不更新。且当文件下载完后页面自动刷新重新显示所有文件列表以及文件下载次数。
求高手解答
求高手解答
解决方案 »
- 当java程序突发性的出现错误你该怎样解决
- ssh整合时Spring文件配置的这句话有什么用???
- 关于apache 多tomcat实现负载均衡的利弊
- 大虾们,救救我吧,一个简单的问题。
- 求助:Weblogic下更新Timestamp字段报错 Data truncation: Incorrect datetime value
- ACTION的测试问题
- 问请我在socket的类里有一个成员变量jFrame类,当jFrame的Jbutton的actionliterner作用时,会有效吗?
- 我快要疯了求求你救救我把
- 紧急,请问怎么写一个JSP来访问后台的EJB,以及怎样在WEBLOGIC下发布运行,看到结果??多谢了,实在是急
- IBM的XML Parser for Java 4.0.1开发包使用问题
- struts.xml中extends= json-default 显示undefined
- 如何避免在for循环中对数据库操作?
在点击确定后提交一个值,把这个值添加到request中,比如flag=true;servlet接收到之后读取flag,如果flag为true的话就调用hibernate+1就行了啊。然后把flag置为false发回。
后面那个点击下载确定后就加1比较现实,也就是开始下载后就+1,在服务器端判断是否下载成功比较麻烦。
servlet在+1之后重定向到那个下载页面就OK了,
* 下载文件
* @param filePath 文件路径(物理路径)
* @param fileName 源文件名称
*/
public void downLoadFile(String filePath, String fileName) {
File file = new File(filePath);
if (!file.exists() || file.isDirectory()) {
return;
}
InputStream input =null;
OutputStream output = null;
try {
input = new FileInputStream(file);
output = getResponse().getOutputStream();
getResponse().setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
byte[] buffer = new byte[1024];
int i = 0;
while ((i = input.read(buffer)) != -1) {
output.write(buffer, 0, i);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(null !=output) {
output.flush();
output.close();
}
if(null !=input) {
input.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
从代码可以看出,下载其实就是往客户端输出文件流的过程,如果程序进入那个循环,说明用户点击了确定下载的按钮,在struts出现之前,老一辈的程序员是这么做下载的,他们也是在这里做判断的!