requestmultipart.java~1~

来自「一个自己做的公司网站和办公职员管理系统。」· JAVA~1~ 代码 · 共 207 行

JAVA~1~
207
字号
package ws.woa.core;

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

/**
 * 儅儖僠僷乕僩儕僋僄僗僩傪拪徾壔偟丄
 * HttpServletRequest偵弨偠偨僀儞僞乕僼僃乕僗傪採嫙偟傑偡丅<br>
 * <br>
 * 僽儔僂僓偑儅儖僠僷乕僩儕僋僄僗僩宍幃偵懳墳偟偰偄傞偙偲傪慜採偲偟偰丄
 * 徻嵶側僄儔乕僠僃僢僋偼峴偭偰偄側偄偺偱丄娐嫬偵傛偭偰偼拲堄偑昁梫偱偡丅
 *
 * @author Wang
 */
public class MultipartRequest extends HttpServletRequestWrapper implements Request {

    private ServletInputStream in;

    private String    delimitor = null;
    private Hashtable hashtable = new Hashtable();
    private Hashtable filetable = new Hashtable();
    private byte      buffer[]  = new byte[4096];

    private String encode;

    //private HttpServletRequest request;

    /**
     * 儅儖僠僷乕僩儕僋僄僗僩偺僨儕儈僞傪庢摼偟傑偡丅
     * @return 僨儕儈僞
     */
    public String getDelimitor(){
        return delimitor;
    }

    /**
     * 儅儖僠僷乕僩宍幃偺儕僋僄僗僩傪夝愅偟偰
     * MultipartRequest偺僀儞僗僞儞僗傪惗惉偟傑偡丅
     * 僽儔僂僓偑懳墳偟偰偄側偄応崌丄RuntimeException傪throw偟傑偡丅
     *
     * @param req 儅儖僠僷乕僩宍幃偺儕僋僄僗僩
     * @exception IOException 擖弌椡椺奜
     */
    public MultipartRequest(HttpServletRequest req,String encode) throws IOException {

        super(req);
        //this.request = req;
        this.encode = encode;

        in = req.getInputStream();

        // 僨儕儈僞偺庢摼 ////////////////////////////////////////////
        int size;
        if((size=in.readLine(buffer,0,buffer.length))==-1){ return; }
        delimitor = new String(buffer,0,size-2,"ISO-8859-1");

        if (delimitor.indexOf("boundary=") != -1){
            delimitor = delimitor.substring(delimitor.indexOf("boundary=")+9,delimitor.length());
            delimitor = "--" + delimitor;
        }

        // 僷乕僗偺奐巒 //////////////////////////////////////////////
        while((size=in.readLine(buffer,0,buffer.length)) != -1){

            String line      = new String(new String(buffer,0,size-2,"8859_1").getBytes("8859_1"),encode);
            String lowerline = line.toLowerCase();

            // 僼傿乕儖僪柤偺庢摼 ///////////////////////////////////////
            int s1 = lowerline.indexOf("name=\"");
            int e1 = lowerline.indexOf("\"",s1+7);
            if(s1 != -1 && e1 != -1){
                 String fieldname = line.substring(s1+6,e1);

                int s2 = lowerline.indexOf("filename=\"");
                if(s2 != -1){

                    // 僼傿乕儖僪偑僼傽僀儖偺応崌偺張棟 /////////////////////
                    int e2 = lowerline.indexOf("\"",s2+10);
                    if(s2 != -1 && e2 != -1){
                        String filename = line.substring(s2+10,e2);
                        File file = new File(filename);
                        addParameter(fieldname,file.getName());

                        // 嬻峴傑偱撉傒旘偽偡
                        while((size=in.readLine(buffer,0,buffer.length)) != 2);

                        // 僶僀僩弌椡僗僩儕乕儉偵僼傽僀儖撪梕傪彂偒弌偡
                        ByteArrayOutputStream content_cache = new ByteArrayOutputStream();

                        while(lowerline.indexOf(delimitor) == -1){
                            size = in.readLine(buffer,0,buffer.length);
                            line = new String(buffer,0,size);
                            lowerline = line.toLowerCase();

                            if(lowerline.indexOf(delimitor) == -1){
                                content_cache.write(buffer,0,size);
                            }
                        }
                        // 僶僀僩攝楍偵曄姺偟偰僴僢僔儏偵奿擺
                        filetable.put(fieldname,content_cache.toByteArray());
                        content_cache.close();

                    }

                } else {
                    // 抣傪庢摼 /////////////////////////////////////
                    // 嬻峴傑偱撉傒旘偽偡
                    while((size=in.readLine(buffer,0,buffer.length)) > 2){ }

                    String fieldvalue = null;
                    boolean retFlag = false;
                    StringBuffer sbValue = new StringBuffer();

                    while(lowerline.indexOf(delimitor)==-1){
                        size = in.readLine(buffer,0,buffer.length);

                        line = new String(new String(buffer,0,size-2,"8859_1").getBytes("8859_1"),encode);
                        lowerline = line.toLowerCase();

                        if(lowerline.indexOf(delimitor)==-1){
                            if(retFlag==true){ sbValue.append("\n"); }
                            sbValue.append(line);
                            retFlag = true;
                        }
                    }
                    fieldvalue = sbValue.toString();
                    //String tmpvalue = (String)hashtable.get(fieldname);
                    //if(tmpvalue != null){ fieldvalue = tmpvalue + ", " + fieldvalue; }
                    //hashtable.put(fieldname,fieldvalue);
                    addParameter(fieldname,fieldvalue);
                }
            }
        }
        in.close();
    }

    /**
     * 儕僋僄僗僩僷儔儊乕僞傪捛壛偟傑偡丅
     * 僼傽僀儖僼傿乕儖僪偺応崌偼僼傽僀儖柤傪捛壛偟傑偡丅
     *
     * @param name  僷儔儊乕僞偺僼傿乕儖僪柤
     * @param param 僷儔儊乕僞偺抣
     */
    private void addParameter(String name,String param){
        Vector vec;
        if(hashtable.get(name)==null){
            vec = new Vector();
        } else {
            vec = (Vector)hashtable.get(name);
        }
        vec.add(param);
        hashtable.put(name,vec);
    }

    /**
     * 僷儔儊乕僞傪庢摼偟傑偡丅
     * 僼傽僀儖僼傿乕儖僪偺応崌偼僼傽僀儖柤傪曉偟傑偡丅
     * 巜掕偺僼傿乕儖僪偵扨堦偺僷儔儊乕僞偑奿擺偝傟偰偄傞応崌偼
     * 僒僀僘侾偺攝楍傪曉偟傑偡丅
     * 僷儔儊乕僞偑懚嵼偟側偄応崌偼null傪曉偟傑偡丅
     *
     * @param key 僷儔儊乕僞偺僼傿乕儖僪柤
     * @return 僷儔儊乕僞
     */
    public String getParameter(String key){
        if(hashtable.get(key)==null){ return null; }
        Vector vec = (Vector)hashtable.get(key);
        if(vec.isEmpty() || vec.size()==0){ return null; }
        return (String)vec.get(0);
    }

    /**
     * 僀儞僨僢僋僗僷儔儊乕僞傪庢摼偟傑偡丅
     *
     * @param key 僀儞僨僢僋僗僷儔儊乕僞偺僼傿乕儖僪柤
     * @return 僀儞僨僢僋僗僷儔儊乕僞
     */
    public String[] getParameterValues(String key){
        if(hashtable.get(key)==null){ return null; }
        Vector vec = (Vector)hashtable.get(key);
        if(vec.isEmpty() || vec.size()==0){ return null; }
        String[] ret = new String[vec.size()];
        for(int i=0;i<vec.size();i++){
            ret[i] = (String)vec.get(i);
        }
        return ret;
    }

    /**
     * 僼傽僀儖偺撪梕傪庢摼偟傑偡丅
     * 巜掕偝傟偨僼傿乕儖僪偑懚嵼偟側偄応崌偼null傪曉偟傑偡丅
     * 僼傽僀儖傪曐懚偣偢偵儊儌儕忋偱張棟傪峴偆応崌偵巊梡偟偰偔偩偝偄丅
     *
     * @param key FILE僼傿乕儖僪偺僼傿乕儖僪柤
     * @return 僼傽僀儖偺撪梕
     */
    public byte[] getFileContent(String key){
        if(hashtable.get(key)==null){ return null; } // FILE柤偑庢摼偱偒側偄
        if(filetable.get(key)==null){ return null; } // 杮懱偑庢摼偱偒側偄
        return (byte[])filetable.get(key);
    }

}

⌨️ 快捷键说明

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