当前位置:  技术问答>java相关

救助!请问怎样实现对真实下载次数的统计,能给例子吗?万分感激!

    来源: 互联网  发布时间:2015-08-06

    本文导语:  救助!请问怎样实现对真实下载次数的统计,能给例子吗?万分感激! | //这个例子只能完成最简单的功能,但绝对可以做到真正记载下载次数。 //不过我没做什么优化,只是采用了最简单的...

救助!请问怎样实现对真实下载次数的统计,能给例子吗?万分感激!

|
//这个例子只能完成最简单的功能,但绝对可以做到真正记载下载次数。
//不过我没做什么优化,只是采用了最简单的方式输出,所以性能很差。
//而且下载得到的文件名只能是Downloader。你可以自己加上代码根据
//取得的url获取文件的正确Mime码,如果文件不是很大(小于4GB^-^,
//不算小了),可以设置好Content-length。你最好是自己将它修改一
//下,以满足真正的需求。我现在也没太多的精力来用心搞这些东西,所
//以做的程序比较糙,仅仅是给你个思路,再有什么问题再问我吧。Servlet
//要在web.xml里面登记后才能访问到,登记好后就这样使用。比如说在你的
//网站里有这样的一个文件http:\www.yourhost.coma.zip需要下载
//,就这样调用Servlet:
//http:\www.yourhost.comDownloader?Url=a.zip
//这里我把Servlet映射成为http:\www.yourhost.comDownloader
//这个Url了。
//web.xml内容如下:
//
//
//
//  
//    Downloader
//    Downloader
//    cn.edu.buct.mechanism.Downloader
//  
//  
//    Downloader
//    /Downloader
//  
//
//对了,劝你改改程序把文件限定在一个与web目录无关的目录里,并且严格限制其可以访问的
//文件,以防止被人利用来获取系统中的重要文件。比如说如果你直接用我的程序下载的话,你
//可以通过这个访问方式http://www.yourhost.com/Downloader?Url=web-infweb.xml
//获取到web-inf/web.xml这样的重要系统文件。其他的重要文件也有危险,其实你绕过Server
//的Http下载机制来达到真正控制下载的目的时,你就必须得自己来解决这些棘手的安全性问题:)
//我现在还懒的来仔细的搞一搞这个东西,所以也就懒的来解决这些安全性问题了。这些东西你可不
//能忽视呀,我反正现在是用不着这个东西,你用就得要防止被别人窃取你的重要资料了(比如说
//jsp文件的源代码。因为谁也无法防止用户直接输入url,并且猜出了实现方式,然后就会轻而易
//举的得到了以前很难得到的东西。对了,补充一下,如果你想提供下载的东西普遍很小,也可以将
//它们放在数据库的Blob字段里,然后从数据库中获得数据,这样的话就可以比较简单的防止被别人
//下载到不想被下载的文件了,再次提醒,不要试图在数据库中放置巨大的文件,这样的话性能会很
//低的。

package cn.edu.buct.mechanism;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

/**
 * 

Title: Downloader 


 * 

Description: Downloader Servlet


 * 

Copyright: Explorer Studio. (c) 2002


 * @author: x-explorer
 * @email: x-explorer@sohu.com
 */

public class Downloader extends HttpServlet {
  public void init() throws ServletException {
  }
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String Url = request.getParameter("Url"); //取得需要下载的文件的url
    if (Url == null) {
      Url = "";
    }
    String Filename = request.getRealPath(Url); //得到需要下载的文件的文件路径
    File DownloadFile = new File(Filename);//得到下载文件的文件类
    response.setContentType("application/x-zip");//设置下载的文件的mime类型
    response.setContentLength((int)DownloadFile.length());//设置输出大小
    ServletOutputStream out = response.getOutputStream();//取得Servlet的输出流
    FileInputStream InStream = new FileInputStream(DownloadFile);//打开下载文件流
    try //在下载过程中设置try catch,如果中途停止下载,则下载完成的代码后面的计数代码则不会执行。
    {
      boolean eof = false;
      int data;
      while (!eof)
      {
        //我没太多时间来优化代码,这些代码只是能够工作,它的性能是比较低的。
        //因此不要试图用这个Servlet下载很大的东西。
        //我只是给你个思路,你可以想想好点的方法来实现,加快它的速度。
        //比如说可以使用批量数据输出或本地方法调用
        data = InStream.read();
        if (data!=-1) out.write(data); //输出下载文件
        else eof=true;
      }
      out.flush();
      out.close();
      //设置标记,你可以将计数代码放置在此,替换掉下面的三行代码。
      FileOutputStream OutStream = new FileOutputStream(new File("C:\Log.txt"));
      OutStream.write(1);
      OutStream.close();
    }
    catch (Exception e) {};
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request,response);
  }
  public void destroy() {
  }
}

|
请问你是如何实现下载的,如果用jspSmartUpload实现下载,是很容易统计下载次数的!

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 救助各位,急!!!!
  • 救助,不知道我的时候跑哪去了
  • 救助:LINUX中常用4种相对目录的表示方法及作用
  • 在线救助(小问题) iis7站长之家
  • 救助:fedora core 7连接不上局域网
  • 150 分!!!!救助 串口中断写法
  • 紧急救助,root登录的问题
  • 在线救助
  • 在线救助(小问题)
  • 救助,关于EJB调用EJB的问题,急急急!!
  • 300分救助中文问题的解决方案(分两次付清)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3