`
晨星★~雨泪
  • 浏览: 447327 次
  • 性别: 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
分享到:
评论

相关推荐

    论坛附件下载器

    标题中的“论坛附件下载器”指的是一个专门设计用于帮助用户批量下载论坛中发布的各种附件的软件工具。在互联网上,论坛是一种常见的交流平台,用户可以在其中发布文本、图片、文档等各类文件作为附件来分享信息。...

    多附件上传 代码

    在当今信息化时代,文件上传功能已经成为各类应用系统中的基本需求之一。特别是在企业级应用中,用户往往需要上传多个文件进行业务处理,这就对系统的文件上传功能提出了更高的要求。本文将通过分析一个多附件上传的...

    DK异站附件上传插件

    【DK异站附件上传插件】是一款专为不同版本论坛设计的高效附件上传工具,它支持5.x、6.x以及7.x三个版本的论坛系统,为用户提供了便捷且高效的文件分享功能。这款插件旨在优化论坛用户体验,提高上传效率,确保用户...

    discuz批量附件上传工具

    3. **格式支持广泛**:Discuz论坛支持的各类附件格式,如图片(JPEG, PNG, GIF等)、文档(DOC, PDF, PPT等)和压缩包等,此工具都能进行批量处理。 4. **自动分类**:根据用户设定,工具可能能够将上传的附件自动...

    ASP+MSSQL 公文传输系统

    在公文传输系统中,ASP用于处理用户请求,生成动态内容,如显示公文列表、处理公文上传与下载等操作。例如,文件`global.asa`是ASP应用程序的核心配置文件,它定义了应用程序的全局变量和事件处理程序,确保系统运行...

    网纪互联公文处理系统 v20100113 修正版-ASP源码.zip

    6. **文档管理**:上传、存储和下载相关的附件,如报告、附件、图片等。 7. **统计分析**:统计公文数量、处理时间等,提供报表以便管理层决策。 解压密码为“www.cqlsoft.com”,这表明该资源可能来源于存起来软件...

    OA办公管理化系统

    1. **文件上传下载**:在Web应用中,通常通过Servlet或Spring的MultipartFile接口处理文件上传。文件会被存储在服务器的某个目录下,下载则是根据文件路径提供HTTP响应。安全性和文件管理策略(如文件命名规则、权限...

    discuz论坛系统

    论坛系统的上传文件夹,主要用于存放用户上传的图片、附件和其他媒体文件。这个目录的设置通常需要考虑到安全性,防止非法文件上传,同时也需要优化访问速度,比如通过缓存技术提高附件的加载效率。 “readme”...

    酒店预订信息管理系统的设计

    系统可能使用了Apache Commons FileUpload或SpringMVC的MultipartFile接口来处理文件上传,将文件保存在服务器的特定目录,并在数据库中记录文件路径,方便后续访问和下载。 时间选择器是用户选择日期的关键组件,...

    北京国税软件退税系统客户端

    3. **退税申请**:说明如何通过系统提交退税申请,包括申请表的填写、所需附件的上传以及申请流程的跟踪。 4. **审批流程**:介绍系统的审批流程,包括各级税务机关的审核步骤,帮助用户理解退税进度。 5. **报表...

    基于php的新闻发布系统

    4. **新闻的上传下载**:系统允许用户下载新闻附带的文件,如PDF文档、图片等。这需要考虑文件存储的策略,如本地存储或云存储,并确保文件的安全性和可访问性。 5. **新闻评论功能**:用户可以对新闻进行评论,...

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

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

    网奇.NET网络商城系统Eshop

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

    办公管理系统系统

    1. **邮件管理**:系统内置邮件客户端,允许用户收发电子邮件,支持附件上传,方便文件传输和团队协作。 2. **账户管理**:员工可以注册和管理自己的账户,包括修改密码、个人信息更新等功能,同时管理员有权进行...

    ASP源码ASP+ACCESS期刊稿件处理系统(源代码+初稿论文+终稿论文+系统说明+答辩PPT)

    ### ASP源码ASP+ACCESS期刊稿件处理系统知识点详解 #### 一、ASP技术概述 - **定义**:ASP(Active Server Pages)是一种服务器端脚本环境,可用于创建和运行动态交互式网页应用程序。它使用HTML页面中的脚本命令...

    用友致远OA办公系统要案

    - **文档共享**: 提供文档上传、下载等功能。 **4.5 辅助办公** - **会议室预订**: 管理会议室资源。 - **车辆管理**: 管理企业车辆使用情况。 **4.6 网络通讯** - **即时通讯**: 内置IM工具,支持实时沟通。 - ...

    VB酒店服务管理系统设计(源代码+系统).rar

    10. **文件操作**:如“PS资源.jpg”等文件可能是系统的附件功能,允许用户上传和下载文件,如发票、合同等。 11. **集成其他工具**:“会声会影礼包.jpg”和“Office礼包.png”可能表示系统集成了视频编辑或办公...

    .NET开发的一整套OA系统

    此外,邮件系统通常还支持附件上传、邮件归档和搜索功能。 公司日程管理系统帮助员工规划和管理个人及团队的日程,可以创建会议、预约、提醒等,有效协调各方时间,避免冲突。 源码和数据库的提供意味着开发者或IT...

    基于SSH实现报道管理系统

    在报道管理系统中,SQLServer用于存储各类报道信息,如标题、内容、作者、发布时间等,通过JDBC(Java Database Connectivity)接口与SSH框架进行交互。 5. **JSP(JavaServer Pages)**:JSP是Java的一种动态网页...

    jsp新闻管理系统.rar

    新闻管理系统可能会包含图片、文档等附件,这就需要实现文件上传和下载功能。在JSP中,可以使用Servlet处理文件上传,将文件保存到服务器指定目录,同时在JSP页面上提供下载链接。 6. 用户认证与授权: 对于一个...

Global site tag (gtag.js) - Google Analytics