⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileupload.java

📁 云网论坛CWBBS 源码,内容丰富,学习,参考,教学的好资料,具体见内说明,
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.redmoon.kit.util;

/**
 * <p>Title: 文件上传组件Redmoon UploadBean</p>
 * <p>Description: 支持多个文件上载,文件保存时可以随机取名称,也可以取文件本来的名称</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: 红月亮工作室</p>
 * @author 蓝风
 * @version 1.0
 */

import java.io.*;
import java.util.*;

import javax.servlet.ServletContext;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import cn.js.fan.web.SkinUtil;

public class FileUpload {
    boolean debug = false;
    public String savePath;
    String filepath, filename, contentType;
    public Dictionary fields;
    private int fileSize = 2048 * 1000; // 单个文件最大2048 * 1000K 即2G,window2000的默认最大值
    String extname = ""; // 上传文件的扩展名
    String[] extnames = null;
    public Vector files = null;

    public Vector tmpFiles = new Vector(); // 存放临时文件名

    static Hashtable hash = new Hashtable();
    // 随机数字生成器
    static Random rand = new Random(System.currentTimeMillis());
    static long lastRandTime = System.currentTimeMillis();

    int ret = 1;

    public static final int RET_SUCCESS = 1;
    public static final int RET_FAIL = -1;
    public static final int RET_TOOLARGEALL = -2;
    public static final int RET_TOOLARGESINGLE = -3;
    public static final int RET_INVALIDEXT = -4;

    public HttpServletRequest request;

    public FileUpload() {
        files = new Vector();
    }

    protected void finalize() throws Throwable {
        super.finalize();
        // 删除临时文件
        Iterator ir = tmpFiles.iterator();
        while (ir.hasNext()) {
            String fpath = (String) ir.next();
            File f = new File(fpath);
            f.delete();
        }
    }

    /**
     * 取文件尺寸默认最大值
     * @return int
     */
    private int getDefaultFileSize() {
        return fileSize;
    }

    /**
     * 置单个文件尺寸默认最大值
     * @param size int
     */
    public void setMaxFileSize(int size) {
        fileSize = size;
    }

    /**
     * 取得所有的文件
     * @return Vector
     */
    public Vector getFiles() {
        return files;
    }

    /**
     * 取上传doUpload()的返回值
     * @return int
     */
    public int getRet() {
        return ret;
    }

    /**
     * 置上传文件的保存路径
     * @param savePath String
     */
    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }

    /**
     * 取得所有域的名称
     * @return Enumeration
     */
    public Enumeration getFields() {
        return fields.keys();
    }

    /**
     * 取得上传文件的保存路径
     * @return String
     */
    public String getSavePath() {
        return savePath;
    }

    public int getMaxAllFileSize() {
        return maxAllFileSize;
    }

    public String getRealPath() {
        return realPath;
    }

    public static String getTmpPath() {
        return tmpPath;
    }

    /**
     * 取得相应表单域的值
     * @param fieldName String 域的名称
     * @return String 当域不存在时,返回值为null
     */
    public String getFieldValue(String fieldName) {
        if (fields == null || fieldName == null) {
            return null;
        }
        return (String) fields.get(fieldName);
    }

    public String[] getFieldValues(String fieldName) {
        Object obj = fields.get(fieldName);
        if (obj==null)
            return null;
        if (obj.getClass().isInstance(fieldName)) {
            String[] r = new String[1];
            r[0] = (String)obj;
            return r;
        }
        else {
            Vector v = (Vector) obj;
            int len = v.size();
            String[] r = new String[len];
            for (int i=0; i<len; i++) {
                r[i] = (String)v.get(i);
            }
            return r;
        }
    }

    /**
     * 分析文件名称
     * @param s String
     */
    private void parseFileName(String s) {
        if (s == null) {
            return;
        }

        int pos = s.indexOf("filename=\"");
        if (pos != -1) {
            filepath = s.substring(pos + 10, s.length() - 1);
            if (filepath.equals("")) {
                return; // 未上传文件
            }
            filename = getUploadFileName(filepath);
            extname = getFileExt(filename);
        }
    }

    /**
     * 置文件内容类型
     * @param s String
     */
    private void setContentType(String s) {
        if (s == null) {
            return;
        }

        int pos = s.indexOf(": ");
        if (pos != -1) {
            contentType = s.substring(pos + 2, s.length());
        }
    }

    public void setMaxAllFileSize(int maxAllFileSize) {
        this.maxAllFileSize = maxAllFileSize;
    }

    public void setRealPath(String realPath) {
        this.realPath = realPath;
    }

    public void setTmpPath(String tmpPath) {
        this.tmpPath = tmpPath;
    }

    /**
     * 置合法的扩展名
     * @param extnames1 String[]
     */
    public void setValidExtname(String[] extnames1) {
        if (extnames1 == null)
            return;
        int len = extnames1.length;
        extnames = new String[len];
        for (int i = 0; i < len; i++) {
            extnames[i] = extnames1[i];
        }
    }

    /**
     * 判别扩展名是否合法
     * @param ext String 扩展名,如: zip、doc、xls、rar等
     * @return boolean
     */
    private boolean isValidExtname(String ext) {
        if (extnames == null) {
            return true;
        }
        int len = extnames.length;
        for (int i = 0; i < len; i++) {
            if (extnames[i].equalsIgnoreCase(ext)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 取得出错信息
     * ret=-1 表示:上传失败
     * ret=-2 表示:文件总的大小超过了预设的最大值
     * ret=-3 表示:单个文件大小超过了预设的最大值
     * ret=-4 表示:扩展名非法
     * ret=1  表示:上传成功
     * @return String
     */
    public String getErrMessage() {
        String msg = "";
        switch (ret) {
        case RET_FAIL:
            msg = "Upload failed."; //"上传失败!";
            break;
        case RET_TOOLARGEALL:
            msg = "The total size of files exceed predefined max size " + getMaxAllFileSize() + "."; // "文件总的大小超过了预定最大值" + getMaxAllFileSize() + "K";
            break;
        case RET_TOOLARGESINGLE:
            msg = "Too large file. Every file should be limited in " + getDefaultFileSize() + " K"; // "文件太大,请把每个文件大小限制在" + this.getDefaultFileSize() + "K以内!";
            break;
        case RET_INVALIDEXT:
            msg = "Invalid ext name."; // "扩展名非法!";
            break;
        case RET_SUCCESS:
            msg = "Success."; // "上传成功!";
            break;
        default:
            msg = "Error RET value."; // "上传返回值出错!";
        }
        return msg;
    }

    public String getErrMessage(HttpServletRequest request) {
        String msg = "";
        switch (ret) {
        case RET_FAIL:
            msg = SkinUtil.LoadString(request, "RET_FAIL"); // "Upload failed."; //"上传失败!";
            break;
        case RET_TOOLARGEALL:
            msg = SkinUtil.LoadString(request, "RET_TOOLARGEALL") + getMaxAllFileSize() + "K"; // "文件总的大小超过了预定最大值" + getMaxAllFileSize() + "K";
            break;
        case RET_TOOLARGESINGLE:
            msg = SkinUtil.LoadString(request, "RET_TOOLARGESINGLE") + getDefaultFileSize() + " K"; // "文件太大,请把每个文件大小限制在" + this.getDefaultFileSize() + "K以内!";
            break;
        case RET_INVALIDEXT:
            msg = SkinUtil.LoadString(request, "RET_INVALIDEXT"); // "扩展名非法!";
            break;
        case RET_SUCCESS:
            msg = SkinUtil.LoadString(request, "RET_SUCCESS"); // "上传成功!";
            break;
        default:
            msg = SkinUtil.LoadString(request, "RET_ERROR"); // "上传返回值出错!";
        }
        return msg;
    }

    public int doUpload(ServletContext application, HttpServletRequest request) throws
            IOException {
        return doUpload(application, request, "utf-8");
    }

    /**
     * 上传文件
     * @param request HttpServletRequest
     * @return int
     * @throws IOException
     */
    public int doUpload(ServletContext application, HttpServletRequest request, String charset) throws
            IOException {
        this.request = request;

        realPath = application.getRealPath("/");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -