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

怎样用程序限制用户只能用浏览器来下载东西

    来源: 互联网  发布时间:2015-05-13

    本文导语:  我开始是用http报头来判断,但是蚂蚁、Flashget这些东西可以更改http报头。怎样限制用户只能用浏览器,或者是限制他们用单线程也可以,我想用程序来实现 怎么办 | package com.shaosi.leon; import...

我开始是用http报头来判断,但是蚂蚁、Flashget这些东西可以更改http报头。怎样限制用户只能用浏览器,或者是限制他们用单线程也可以,我想用程序来实现 怎么办

|
package com.shaosi.leon;

import java.io.*;
import java.util.Vector;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;

/**
 * The object which perfoms the download.
 * @author: Leon Zhao
 */
public class Download {
    protected ServletContext m_application;
    protected HttpServletRequest m_request;
    protected HttpServletResponse m_response;
    private boolean m_denyPhysicalPath;
    private boolean m_forcePhysicalPath;
    private String m_contentDisposition;
    private Vector m_deniedFilesList;
    private Vector m_allowedFilesList;
    /**
     * save in a virtual if it exists else consider the path as a physical if the porperty denyPhysicalPath is false.
     */
    public static final int SAVE_AUTO = 0;
    /**
     * save the file only if the path is a virtual path.
     */
    public static final int SAVE_VIRTUAL = 1;
    /**
     * save the file only if the path is a physical path.
     */
    public static final int SAVE_PHYSICAL = 2;
    /**
     * open the file only if the path is a physical path.
     */
    /**
     * Download constructor comment.
     */
    public Download() {
        m_deniedFilesList = new Vector();
        m_allowedFilesList = new Vector();
        m_denyPhysicalPath = false;
        m_forcePhysicalPath = false;
        m_contentDisposition = new String();
    }
    /**
     * Downloads a file.
     * @param sourceFilePathName java.lang.String The full path to the file to download.
     * @exception UploadException
     * @exception IOException
     * @exception ServletException
     */
    public void downloadFile(String sourceFilePathName)
        throws UploadException, IOException, ServletException {
        downloadFile(sourceFilePathName, null, null);
    }
    /**
     * Downloads a file.
     * @param sourceFilePathName java.lang.String The full path to the file to download.
     * @param contentType java.lang.String the content type.
     * @exception UploadException
     * @exception IOException
     * @exception ServletException
     */
    public void downloadFile(String sourceFilePathName, String contentType)
        throws UploadException, IOException, ServletException {
        downloadFile(sourceFilePathName, contentType, null);
    }
    /**
     * Downloads a file.
     * @param sourceFilePathName java.lang.String The full path to the file to download.
     * @param contentType java.lang.String the content type.
     * @param destFileName java.lang.String the suggested file name.
     * @exception UploadException
     * @exception IOException
     * @exception ServletException
     */
    public void downloadFile(
        String sourceFilePathName,
        String contentType,
        String destFileName)
        throws UploadException, IOException, ServletException {
        downloadFile(sourceFilePathName, contentType, destFileName, 65000);
    }
    /**
     * Downloads a file.
     * @param sourceFilePathName java.lang.String The full path to the file to download.
     * @param contentType java.lang.String the content type.
     * @param destFileName java.lang.String the suggested file name.
     * @param blockSize int block size
     */
    public void downloadFile(
        String sourceFilePathName,
        String contentType,
        String destFileName,
        int blockSize)
        throws UploadException, IOException, ServletException {
        if (sourceFilePathName == null)
            throw new IllegalArgumentException(
                String.valueOf(
                    (new StringBuffer("File '")).append(sourceFilePathName).append(
                        "' not found (1040).")));
        if (sourceFilePathName.equals(""))
            throw new IllegalArgumentException(
                String.valueOf(
                    (new StringBuffer("File '")).append(sourceFilePathName).append(
                        "' not found (1040).")));
        if (!isVirtual(sourceFilePathName) && m_denyPhysicalPath)
            throw new SecurityException("Physical path is denied (1035).");
        if (isVirtual(sourceFilePathName))
            sourceFilePathName = m_application.getRealPath(sourceFilePathName);
        java.io.File file = new java.io.File(sourceFilePathName);
        FileInputStream fileIn = new FileInputStream(file);
        long fileLen = file.length();
        int readBytes = 0;
        int totalRead = 0;
        byte b[] = new byte[blockSize];
        if (contentType == null)
            m_response.setContentType("application/x-filler");
        else if (contentType.length() == 0)
            m_response.setContentType("application/x-filler");
        else
            m_response.setContentType(contentType);
        m_response.setContentLength((int) fileLen);
        m_contentDisposition =
            m_contentDisposition != null ? m_contentDisposition : "attachment;";
        if (destFileName == null)
            m_response.setHeader(
                "Content-Disposition",
                String.valueOf(
                    (new StringBuffer(String.valueOf(m_contentDisposition)))
                        .append(" filename=")
                        .append(getFileName(sourceFilePathName))));
        else if (destFileName.length() == 0)
            m_response.setHeader("Content-Disposition", m_contentDisposition);
        else
            m_response.setHeader(
                "Content-Disposition",
                String.valueOf(
                    (new StringBuffer(String.valueOf(m_contentDisposition)))
                        .append(" filename=")
                        .append(destFileName)));
        while ((long) totalRead 

    
 
 

您可能感兴趣的文章:

  • 为什么我的applet程序修改了不起作用(win2k),浏览器总是显示前一次装入的程序?
  • 请教如何使用Java编写的Applet程序关闭浏览器??
  • 我的小应用程序在JCREATOR的Appletviewer里可以浏览但是不能在浏览器里运行这是为什么
  • 请教:想用c语言编写能使浏览器启动的一个程序?
  • 在浏览器上运行Java程序 Doppio
  • 请问各不同的浏览器版本对应支持Java相应的哪个版本编译出来的程序?
  • java for web程序在浏览器显示阴影而不显示内容?
  • 我用applet通过rmi访问本机的服务器程序。。为什么用appletviewer能用?用浏览器却不行?
  • 关于java 小程序浏览器不能显示的问题
  • 救命啊,JBuilder做的小程序怎么不能在IE浏览器中运行啊?
  • 求个shell程序:分析Apache的日志,取得每条记录的访问IP,浏览器,访问时间
  • red hat8.0 下如何配置modem及浏览器参数,用什么程序能拨号?上网即给分
  • 为什么我的小程序用appletviewer可以运行,而在浏览器中就不行呢?
  • 请问大家,用java作图形应用程序可以脱离浏览器吗,一定需要GUI的图形操作系统支持吗?
  • 高分相赠,Applet在jbuilder中运行程序时文件路径正确,但在jbuilder的浏览器中文件路径却出错!
  • 是不是java程序想在浏览器中运行,就必须得用applet呢?
  • 请问JCreator里不能直接运行Applet程序吗?一定要用appletviewer或者浏览器啊?麻烦死了
  • 为何在appletviewer中可以正确运行的java applet程序在IE5.0浏览器中不能运行
  • 请问mozilla浏览器是否支持Java apllet小程序
  • 利用浏览器的Javascript控制台调试PHP程序
  • sccs只能管理单个程序,有没有能管理多个程序的工具?
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 关于限制程序只能运行一次
  • 如何在Linux上实现同时只能启动一个实例的程序?
  • 设置C#窗体程序只能启动一次
  • linux下,目录下的程序只能跑一份
  • 谁升级过rpm程序本身?我升级失败,现在只能通过源代码方式升级了~~~
  • 怎样把整张网页内容当作一副图形(只能作为图像,因为可能网页中有图)传给控制打印的Java程序?
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • solaris上的C程序,编译报错: 存储类只能使用register,奇怪,奇怪!
  • linux下能否限制某一用户只能运行某个(或某几个)特定的程序(如shutdown),我用的是rh9
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 执行一程序,向一个文本文件中写入数据,报文件大小超出限制错误!
  • shell 程序中top 命令屏幕限制
  • 请问程序的日志重定向到别日志文件,系统会对该日志文件的大小作限制么
  • Linux系统中,如何实现对内存或SD卡的一块区域限制访问?只允许我的特定程序访问?
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • linux下通过crond实现自动执行程序
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • http协议介绍,文件上传分析及程序举例
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • 程序员赚钱致富的6种方法
  • 程序调用脚本,脚本启动另一个程序,如何让原始程序彻底释放资源?
  • HASH查找的程序实现及性能分析
  • python计算程序开始到程序结束的运行时间和程序运行的CPU时间
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收


  • 站内导航:


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

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

    浙ICP备11055608号-3