Package com.bj58.argo.internal

Source Code of com.bj58.argo.internal.OldArgoRequest

package com.bj58.argo.internal;

import com.bj58.argo.ArgoException;
import com.bj58.argo.thirdparty.jetty.LazyList;
import com.bj58.argo.thirdparty.jetty.MultiMap;
import com.bj58.argo.thirdparty.jetty.MultiPartInputStreamParser;

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.Part;
import java.io.*;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

public class OldArgoRequest extends HttpServletRequestWrapper {

    /**
     * 创建时间
     */
//    private final long birthTime = System.currentTimeMillis();

    private final MultiPartInputStreamParser mpis;





    /**
     * Constructs a request object wrapping the given request.
     *
     * @throws IllegalArgumentException
     *          if the request is null
     */
    OldArgoRequest(HttpServletRequest request, MultipartConfigElement config) {
        super(request);

        if (!isMultiPart(request)) {
            mpis = null;
            return;
        }

        try {

            InputStream in = new BufferedInputStream(request.getInputStream());
            String content_type=request.getContentType();

            //Get current parameters so we can merge into them
            MultiMap<Object> params = new MultiMap<Object>();
            for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet())
            {
                String[] value = entry.getValue();
                System.out.println("entry key:" + entry.getKey() + "value:" + value[0]);
                if (value instanceof String[]) {
                    params.addValues(entry.getKey(), (String[])value);
//                    System.out.println("entry key:" + entry.getKey() + "value:" + );
                }
                else
                    params.add(entry.getKey(), value);
            }

            mpis = isMultiPart(request) ? getMultiPartInputStreamParser(request, config) : null;
//            _params = paramMultiMap(request, mpis);
        } catch (Exception e) {
            clean();
            throw ArgoException.raise(e);
        }
    }

    private boolean isMultiPart(HttpServletRequest request) {
//        return (request.getContentType()==null||!request.getContentType().startsWith("multipart/form-data"));

        if (!"post".equals(request.getMethod().toLowerCase())) {
            return false;
        }
        String contentType = request.getContentType();
        if (contentType == null) {
            return false;
        }
        if (contentType.toLowerCase().startsWith("multipart/")) {
            return true;
        }
        return false;
    }



    private MultiPartInputStreamParser getMultiPartInputStreamParser(HttpServletRequest request, MultipartConfigElement config) throws IOException {
        InputStream in = new BufferedInputStream(request.getInputStream());
        String content_type = request.getContentType();

        File tempDir = new File(config.getLocation());

        MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(in, content_type, config, tempDir);
        mpis.setDeleteOnExit(true);
        return mpis;
    }


    void clean()
    {
        if (mpis == null)
            return;

        try
        {
            mpis.deleteParts();
        }
        catch (Exception e)
        {
            throw ArgoException.raise("Error deleting multipart tmp files", e);
        }
    }

    @Override
    public Collection<Part> getParts() throws IOException, ServletException {
        return mpis.getParts();
    }

    @Override
    public Part getPart(String name) throws IOException, ServletException {
        return mpis.getPart(name);
    }



//
//    public final static String CONTENT_TYPE_SUFFIX=".org.eclipse.jetty.servlet.contentType";
//
//    public static int bufferSize = 64*1024;
//
//    private final static String MULTIPART = "org.eclipse.jetty.servlet.MultiPartFile.multiPartInputStream";
//
//    public final static String __UTF8="UTF-8";
//    private final MultiPartInputStreamParser mpis;
//
////    private File tempdir;
//    private int _fileOutputBuffer = 0;
//    private long _maxFileSize = -1L;
//    private long _maxRequestSize = -1L;
    private int _maxFormKeys = 1000;



//    private String _encoding = __UTF8;

//    private final MultiMap<Object> _params;

//        private MultiMap<Object> paramMultiMap(HttpServletRequest request, MultiPartInputStreamParser mpis) throws Exception {
//
//        //Get current parameters so we can merge into them
//        MultiMap<Object> params = new MultiMap<Object>();
//        for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet())
//        {
//            Object value = entry.getValue();
//            if (value instanceof String[])
//                params.addValues(entry.getKey(), (String[])value);
//            else
//                params.add(entry.getKey(), value);
//        }
//
//
//        Collection<Part> parts = mpis.getUploads();
//        if (parts != null)
//        {
//            Iterator<Part> iterator = parts.iterator();
//            while (iterator.hasNext() && params.size() < _maxFormKeys)
//            {
//                Part p = iterator.next();
//                MultiPartInputStreamParser.MultiPart mp = (MultiPartInputStreamParser.MultiPart)p;
//                if (mp.getFile() != null)
//                {
//                    request.setAttribute(mp.getName(),mp.getFile());
//                    if (mp.getContentDispositionFilename() != null)
//                    {
//                        params.add(mp.getName(), mp.getContentDispositionFilename());
//                        if (mp.getContentType() != null)
//                            params.add(mp.getName()+CONTENT_TYPE_SUFFIX, mp.getContentType());
//                    }
//                }
//                else
//                {
//                    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
//                    IoCopy(p.getInputStream(), bytes);
//                    params.add(p.getName(), bytes.toByteArray());
//                    if (p.getContentType() != null)
//                        params.add(p.getName()+CONTENT_TYPE_SUFFIX, p.getContentType());
//                }
//            }
//        }
//
//        return params;
//
//
//    }

    //
//    /* ------------------------------------------------------------------------------- */
//    /**
//     * @see javax.servlet.ServletRequest#getContentLength()
//     */
//    @Override
//    public int getContentLength()
//    {
//        return 0;
//    }
//
//        /* ------------------------------------------------------------------------------- */
//    /**
//     * @see javax.servlet.ServletRequest#getParameter(java.lang.String)
//     */
//    @Override
//    public String getParameter(String name)
//    {
//        Object o=_params.get(name);
//        if (!(o instanceof byte[]) && LazyList.size(o)>0)
//            o=LazyList.get(o,0);
//
//        if (o instanceof byte[])
//        {
//            try
//            {
//                return new String((byte[])o,_encoding);
//            }
//            catch(Exception e)
//            {
//                e.printStackTrace();
//            }
//        }
//        else if (o!=null)
//            return String.valueOf(o);
//        return null;
//    }
//
//        /* ------------------------------------------------------------------------------- */
//    /**
//     * @see javax.servlet.ServletRequest#getParameterMap()
//     */
//    @Override
//    public Map<String, String[]> getParameterMap()
//    {
//        Map<String, String[]> cmap = new HashMap<String,String[]>();
//
//        for ( Object key : _params.keySet() )
//        {
//            String[] a = LazyList.toStringArray(getParameter((String)key));
//            cmap.put((String)key,a);
//
//        }
//
//        return Collections.unmodifiableMap(cmap);
//    }
//
//        /* ------------------------------------------------------------------------------- */
//    /**
//     * @see javax.servlet.ServletRequest#getParameterNames()
//     */
//    @Override
//    public Enumeration<String> getParameterNames()
//    {
//        return Collections.enumeration(_params.keySet());
//    }
//
//        /* ------------------------------------------------------------------------------- */
//    /**
//     * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String)
//     */
//    @Override
//    public String[] getParameterValues(String name)
//    {
//        List l=_params.getValues(name);
//        if (l==null || l.size()==0)
//            return new String[0];
//        String[] v = new String[l.size()];
//        for (int i=0;i<l.size();i++)
//        {
//            Object o=l.get(i);
//            if (o instanceof byte[])
//            {
//                try
//                {
//                    v[i]=new String((byte[])o,_encoding);
//                }
//                catch(Exception e)
//                {
//                    throw new RuntimeException(e);
//                }
//            }
//            else if (o instanceof String)
//                v[i]=(String)o;
//        }
//        return v;
//    }
//
//        /* ------------------------------------------------------------------------------- */
//    /**
//     * @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String)
//     */
//    @Override
//    public void setCharacterEncoding(String enc)
//            throws UnsupportedEncodingException
//    {
//        _encoding=enc;
//    }
//
//
//        /* ------------------------------------------------------------------- */
//    /** Copy Stream in to Stream out until EOF or exception.
//     */
//    private static void IoCopy(InputStream in, OutputStream out)
//            throws IOException
//    {
//        IoCopy(in, out, -1);
//    }
//
//        /* ------------------------------------------------------------------- */
//    /** Copy Stream in to Stream for byteCount bytes or until EOF or exception.
//     */
//    private static void IoCopy(InputStream in,
//                              OutputStream out,
//                              long byteCount)
//            throws IOException
//    {
//        byte buffer[] = new byte[bufferSize];
//        int len=bufferSize;
//
//        if (byteCount>=0)
//        {
//            while (byteCount>0)
//            {
//                int max = byteCount<bufferSize?(int)byteCount:bufferSize;
//                len=in.read(buffer,0,max);
//
//                if (len==-1)
//                    break;
//
//                byteCount -= len;
//                out.write(buffer,0,len);
//            }
//        }
//        else
//        {
//            while (true)
//            {
//                len=in.read(buffer,0,bufferSize);
//                if (len<0 )
//                    break;
//                out.write(buffer,0,len);
//            }
//        }
//    }
}
TOP

Related Classes of com.bj58.argo.internal.OldArgoRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.