问题描述
目前公司网上网站提供一些软件和素材下载,考虑到静态资源的处理能力,所有的静态资源都走了apache,这样的话我如何统计那些素材的下载次数了。有人说通过分析apache日志,不过那不是我想要的方案,我想能否通过java程序去处理,然后下载走apache了,希望大家给点提示。。。 问题补充:scl333 写道
解决方案
引用目前我就是采用的这种方案做的,在网站下载页面提供链接直接映射到控制器,先记录下载次数,然后sendredirect到指定的下载目录,不过从实现效果来看不是很稳定,统计的次数常常少于真正下载的次数,所以寻找其他方案。用过滤器,把资源文件的路径映射一下,直接在filter里面计数就行了,这种方式应该是最好的,因为它不可能不通过filter下载。而你用servlet的话,别人只要通过盗链就可以下载,不需要通过你的servlet。除非你的servlet配置的路径跟过滤器一样。不过过滤器肯定是最佳选择。一般网站上防止别人盗链 盗采你的图片或者其他资源 一般都是通过filter来过滤的。
解决方案二:
楼主你说实际下载量远远大于你统计到的下载量? 我认为, 你通过redirect重定向的资源, 很可能是直接可以访问的资源, 也就是说没有任何权限控制, 登录验证什么的? 这样用户通过下载工具下载, 会同时开启很多请求并发下载, 而且, 被下载工具记录资源后, 很多时候其他用户下载同样资源(没有访问你的网站), 下载工具也会直接请求到你的服务器上, 分流数据. 如果要更好的统计, 最好的方法是自己控制资源返回(servlet中读取资源, 以流返回, 而不是URL直接能访问到目标文件), 并加上验证.
解决方案三:
你的项目一个过滤器都没用?不需要你redirect啊
解决方案四:
实现一个servlet, 在servlet中计数, 所有的下载都通过这个servlet转向或直接回写给客户端即可.例如 所有的下载都以这个格式 /download/?id=29831servlet记录id=29831的下载次数, 并重定向这个资源的实际地址, 或者直接读数据, 返回给客户端.
解决方案五:
首先你的素材,是放在某些特定的文件夹下的吧。最简单的办法是配置过滤器,把路径映射到你的这个文件夹,每请求一次,记录一次。就ok了。