`
晨星★~雨泪
  • 浏览: 442986 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

处理系统中的各类附件,上传下载

阅读更多
package com.highcom.object.common;

import java.io.*;
import javax.servlet.*;
import com.jspsmart.upload.*;
import com.highcom.hcgip.basic.common.*;
import javax.servlet.http.*;

/**
* 处理系统中的各类附件。这些附件被保存到在config.properties中attachmentpath指定的路径下。
* <p>Title: Objective Management System</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* @version 1.0
*/

public class FileKeeper
    extends javax.servlet.http.HttpServlet {
    public static String base_dir;
    static {
        base_dir = PropertiesReader.getConfigValue("attachmentpath");
    }

    public FileKeeper() {
    }

    public static String getRelativePath(java.io.File abs_path){
        String fullpath= abs_path.getAbsolutePath();
        String new_fullpath = fullpath.replaceAll("/","\\").toLowerCase();
        String new_base_dir = base_dir.replaceAll("/","\\").toLowerCase();
        int i=new_fullpath.indexOf(new_base_dir);
        if(i<0){
           return fullpath;
        }else{
            return  fullpath.substring(i);
        }
     }

    /**
     * 上传一个文件,保存到指定文件夹。
     * @param for_upload File 需要保存的文件
     * @param relative_dir String 指定的文件夹(相对路径),路径用"\\"分割。
     * @param rename boolean 是否要系统自动重命名为其它名字
     * @return String 如果保存成功,返回相对地址。否则,返回null
     */
    public static String upload(com.jspsmart.upload.File for_upload,
                                      String relative_dir, boolean rename) {
        if (for_upload == null) {
            return null;
        }
        if (relative_dir == null || relative_dir.length() == 0) {
            relative_dir = "\\";
        }
        if (!relative_dir.startsWith("\\")) {
            relative_dir = "\\" + relative_dir;
        }
        if (!relative_dir.endsWith("\\")) {
            relative_dir = relative_dir + "\\";
        }
        java.io.File dir = new java.io.File(base_dir + relative_dir);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        java.io.File saved = null;
        if (rename) {
            try {
                saved = java.io.File.createTempFile("sys", "", dir);
            }
            catch (Exception ex) {
                ex.printStackTrace();
                Log.debug(ex, "FileKeeper");
            }

        }
        else {
            String filename = for_upload.getFileName();
            saved = new java.io.File(dir.getAbsolutePath() +
                                     java.io.File.separator + filename);
        }
        if (saved == null) {
            return null;
        }
        try {
            for_upload.saveAs(saved.getAbsolutePath(),
                              SmartUpload.SAVE_PHYSICAL);
        }
        catch (Exception ex) {
            ex.printStackTrace();
            Log.debug(ex, "FileKeeper");
            saved = null;
        }
        if(saved!=null){
            return relative_dir + saved.getName();
        }else{
            return null;
        }
    }

    /**
     * 取得一个指定文件的流。
     * @param relative_path String 相对路径,包含文件名。
     * @return InputStream 该文件的输入流,供外部程序读取。
     */
    public static InputStream download(String relative_path) {
        if (!relative_path.startsWith("\\")) {
            relative_path = "\\" + relative_path;
        }
        java.io.File file = new java.io.File(base_dir + relative_path);
        if (!file.exists()) {
            return null;
        }
        else {
            try {
                return new FileInputStream(file);
            }
            catch (Exception ex) {
                ex.printStackTrace();
                Log.debug(ex, "FileKeeper");
                return null;
            }

        }

    }
    /**
     * 删除指定文件。
     * @param relative_path String 文件的相对路径。请不要以“/”开头。可以用"\"开头,也可以不用。
     */
    public static void delete(String relative_path){
        if(!relative_path.startsWith("\\")){
            relative_path = "\\"+relative_path;
        }
        java.io.File file = new java.io.File(base_dir+relative_path);
        if(file.exists() && file.isFile()){
            file.delete();
        }

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
        ServletException, IOException {
        //System.out.println("do post....");
        doGet(request, response);
    }
    /**
     * 处理下载文件的请求。需要在request中提供三个参数:
     * 1.path,说明需要下载的文件的相对路径,包含磁盘文件名本身。
     * 2.filename,说明一个文件名,这个文件名将成为用户保存文件时的默认用户名。如果不提供,系统取在path中的文件名
     * 3.mime,说明文件的MIME_TYPE。如果不提供,默认为"application/*"。
     * @param request HttpServletRequest
     * @param response HttpServletResponse
     * @throws ServletException
     * @throws IOException
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
        ServletException, IOException {
        //System.out.println("FileKeeper do get...");

        String relative_path = ParameterParser.getStrPara(request, "path");
        String filename = ParameterParser.getStrPara(request, "filename");
        String mime = ParameterParser.getStrPara(request, "mime");

        if (mime.length() > 0) {
            response.setContentType(mime);
        }
        else {
            response.setContentType("application/*");
        }
        response.setHeader("Content-Disposition",
                           "attachment;filename=" + filename);

        InputStream in = download(relative_path);

        if (in == null) {
            Log.debug("文件" + filename + "不存在.", this);
            response.getOutputStream().close();
            return;
        }
        byte[] b = new byte[1024];
        int len;
        while ( (len = in.read(b)) > 0) {
            response.getOutputStream().write(b, 0, len);
        }
        in.close();
        response.getOutputStream().flush();
        response.getOutputStream().close();

    }

}



http://www.qjcool.com/Article/pcjiaocheng/200711/58844.html
分享到:
评论

相关推荐

    网奇.NET网络商城系统Eshop

    无需任何设置,上传到支持asp.net的主机空间即可使用。 系统内置多套网络商城专业模板,适合开网上书店、花店、数码产品店、化妆品、手机店。网奇官方网站(http://www.wangqi.com)更不定时的推出新的精美模板。 ...

    完美学校网站系统全站源代码学校网站模板下载

    24:附件上传按后缀,时间分别建立目录 25:全面支持无大类、无小类文章,各级页面均支持模板 26:最新添加单位稿件统计(旧版本升级请后台运行Tools_UpdateDB-11-6.asp升级数据库) 27:其他错误修正 29:首页...

    时代设计网站信息管理系统SDCMS v1.1 SP1.rar

    1.上传的文件按日期放于附件文件夹内 2.改写了图片文件类型判断和站外文件判断函数 3.搜索单独放于search文件夹内 4.重新调整了调用的标签,更加人性化 5.分离了列表、搜索、公告等分页,更加方便设置分页和列表...

    DOYO通用建站系统 v2.3 build20140425.zip

    强大字段自定义功能,完善的后台开关模块,不会编程也能搭建各类网站系统。 4、会员、留言、投稿神马一个不能少 不断升级完善的模块与插件,灵活的组装与自定义设置,满足你的多样需求。 5、安装、升级、备份、...

    各级教学教育学校网站源码下载

    24:附件上传按后缀,时间分别建立目录 25:全面支持无大类、无小类文章,各级页面均支持模板 26:最新添加单位稿件统计(旧版本升级请后台运行Tools_UpdateDB-11-6.asp升级数据库) 27:其他错误修正 29:首页...

    OA系统+手机版源码t源代码

    本程序结合了OA办公系统+HR人力资源管理系统+CRM客户关系管理系统集合而成。我们把程序设计信息化应用分为三个方面的内容:通用办公应用、业务管理和决策支持。采用现代最新技术,建立一种新概念的、开放的现代管理...

    计算机专业毕设精选-ASP.NET通用作业批改系统设计(源代码+论文).rar

    2. **作业发布与提交**:教师可以发布作业,设置截止日期和上传相关附件;学生可以在规定时间内提交作业。 3. **自动批改**:系统内置了多种批改算法,可根据作业类型自动计算成绩,并给出批改建议。 4. **手动批改*...

    SmartSite智能网站管理系统 v2.9.1.rar

    任何上传的图片文件经过系统处理后都可以轻松打上水印。 12、经验丰富、服务周到: 打造国内品牌, 值得您的信赖,仙人掌软件不断完 善和优化各种操作细节,用户 使用仙人掌软件会是一个愉快的体验 SmartSite智能...

    DOYO通用建站系统 2.3.rar

    16、更换编辑器为kindeditor17、增加系统安全密钥功能,对隐私数据进行加密处理,进一步提高安全性能18、其他多达50处细节功能优化调整,进一步提成兼容性、执行效率等。 特色: 1、架构轻盈,完全免费与开源 ...

    php OA 源码 办公自动化源码

    在报表设计器中设计完成后的报表模板,上传到OA系统中,访问者就可以查看相关的报表的内容,报表的内容会根据定义好的SQL条件进行实时获取数据。 可以根据要求,自动生成日报表,周报表,月报表,自动发送到相关人员...

    卓越网站快车网络建站系统说明6.14版

    在插入时只用一个万能按钮,填入地址,系统自动识别文件类型,并做相应处理。现在这个按按钮我还没想好用什么图标,有兴趣的朋友帮阿余设计一个如何? 4 编辑器插入表格的功能也得到了加强。 5 首页可以自动定义...

    KesionIMALL 电子商务系统 v2.5.150206 免费正式版.rar

    11.修复图片及下载类模型上传附件,不能插入到编辑器 12.修复商城购物车改变选购数量,不按规格属性里设置的库存量进行判断 13.修复后台搜索文档,输入关键字带有单引号会出错 14.修复商城系统,会员中心添加收货...

    2009计算机 毕业设计 诚信体育用品

    管理员可上传附件,跟随在信息后面起到补充作用; 管理员可设定信息的自动发布时间和自动过期日期,系统会根据预设智能发布或撤销信息; 管理员可设定某条信息为首页信息,系统自动将其更新在首页上; 浏览者可通过...

    Discuz! X1.5 RC Release 20100901 GBK.rar

    重构 风格模板以及CSS,让风格制作更简易降低 页面数据输出量,提升页面渲染速度调整 各功能显示细节,增大提示信息的友好度改善 直接下载收费附件的用户体验改善 趋势统计功能用户体验改进改进 论坛提示系统的显示...

    人力资源管理软件(完全免费)

    人力资源管理软件增加退出系统时提示(感谢中秋月) 2008-01-22 人力资源管理软件做了以下改进 人力资源管理软件改进了员工调岗的编辑界面(感谢缺月疏桐) 增加了计件工资的功能,包括工序定义、计件录入和查询...

    微信源码微趣能Weiqn最新官方版

    5. 新增:本地附件上传和FTP以及云存储方式; 6. 新增:微官网,支持DIY模式 7. 新增:语音消息的支持; 8. 新增:LBS回复信息的支持; 9. 优化:可视化自定义菜单; 10. 新增:自定义应答菜单; 11. 开放:...

    94KKBBS v1.19 简体中文版

    论坛数据库已经做好了防下载的处理,但仍然希望您能够修改数据库的名称,把扩展名改成asp,并且同时修改conn.asp中数据库的名称。 2。如果是全新使用本论坛那么请新建一个论坛管理员(先注册一个用户,以原管理...

    近乎v5.0源码 Almostv50.rar

    v5.0对SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等主要威胁进行了系统的处理,实现了灵活、细致的权限管理功能,充分构筑了应用程序级安全。 8、易于扩展,便于开发 v5.0站点导航可自定义、可快速增加...

    LvBBS 94KK美化加强版

    附件上传功能,更加详尽显示文件参数 006.上传非法附件检测,一些修改扩展名上传的将被阻止 007.限制每个用户每天上传文件数,实时统计绝对可靠 008.用户等级制度,等级名称后台随意设置 009.强化的...

Global site tag (gtag.js) - Google Analytics