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

📄 mimemultipartentry.java

📁 封装了SQL、Socket、WAP、MIME等功能的通用组件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package org.lazybug.mime;

import java.io.*;
import javax.mail.MessagingException;
import javax.mail.internet.MimeUtility;
import java.util.Vector;
import java.util.Hashtable;
import org.lazybug.util.BytesUtile;
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class MimeMultipartEntry extends MimePart
{

    static final int SEEK_BEGIN_BOUNDARY = 0;
    static final int SEEK_END_BOUNDARY = 1;

    /*Multipart部件队列*/
    private Vector partList;
    /*Multipart部件映射关系*/
    private Hashtable partMap;
    /*内容*/
    private String text;

    public MimeMultipartEntry()
    {
        this.partList = new Vector();
        this.partMap = new Hashtable();
        this.setHeader("Content-Location", "www.lazybug.com");
    }

    private static final int BODY_SCAN_CONTINUE = 0;
    private static final int BODY_SCAN_BEGIN = 1;
    private static final int BODY_SCAN_END = 2;
    /**
     *
     * @param inputstream InputStream
     * @param boundary byte[]
     * @return boolean
     * @throws IOException
     */
    private int findMimeBoundaryEol(InputStream inputstream,
        byte[] boundary) throws IOException
    {
        boolean bBoundary = false;
        int ch;
        do{
            ch = inputstream.read();
            if( ch == '-' )
            {
                if( bBoundary )
                {
                    for( int i = 0; i < boundary.length; i++ )
                    {
                        if( inputstream.available() <= 0 )
                        {
                            return BODY_SCAN_END;
                        }
                        int c = inputstream.read();
//System.out.println(c+","+boundary[i]);
                        if( boundary[i] != c )
                        {
                            return BODY_SCAN_CONTINUE;
                        }
                    }

                    break;
                }
                bBoundary = true;
            }
            else
            {
                bBoundary = false;
            }

        }while(inputstream.available()>0);

        if( inputstream.available() < 2 )
            return BODY_SCAN_END;

        int ch1, ch2;
        ch1 = inputstream.read();
        ch2 = inputstream.read();
        if( ch1 == 0x0d && ch2 == 0x0a )
        {
            return BODY_SCAN_BEGIN;
        }
        else if( ch1 == '-' && ch2 == '-' )
        {
            return BODY_SCAN_END;
        }

        return BODY_SCAN_CONTINUE;
    }

    public MimeMultipartEntry(InputStream inputstream) throws IOException
    {
        super(inputstream);

        this.partList = new Vector();
        this.partMap = new Hashtable();

        if( this.getContentType() == null ) return;
        String b = this.getContentType().getParameter("boundary");
        if( b == null )
        {
//System.out.println("b=null");
            boolean bWaitEol = false;
            boolean bDblEol = false;
            //boolean bWaitData = true;
            int ch;
            while( inputstream.available() > 0 )
            {
                ch = inputstream.read();
                /*if( bWaitData )
                {
                    if( ch != 0x0d && ch != 0x0a )
                    {
                        bWaitData = false;
                    }
                    else
                    {
                        continue;
                    }
                }*/

                BytesUtile.write(ch);
                if( bWaitEol && ch == 0x0a)
                {
                    BytesUtile.rollback(2);
                    if( bDblEol ) break;
                    bDblEol = true;
                    continue;
                }
                else if( ch == 0x0d )
                {
                    bWaitEol = true;
                    continue;
                }

                bDblEol = false;
                bWaitEol = false;
            }
            super.payloading = true;
            this.payload = BytesUtile.getPayload();
  //          com.kehaoinfo.util.Tools.printb(this.payload);
            return;
        }
        BytesUtile.init();
        byte bb[] = b.getBytes();
        while( inputstream.available() > 0){
            switch( findMimeBoundaryEol(inputstream, bb) )
            {
            case BODY_SCAN_CONTINUE:
//System.out.println("----BODY_SCAN_CONTINUE");
                break;
            case BODY_SCAN_BEGIN:
//System.out.println("--BODY_SCAN_BEGIN");
                MimeMultipartEntry newPart =
                    new MimeMultipartEntry(inputstream);
                this.addMultipartEntry(newPart);
//System.out.println(inputstream.available());
                break;
            case BODY_SCAN_END:
//System.out.println("----BODY_SCAN_END----");
                return;
            }
        }
    }

    public void addMultipartEntry(MimePart part, int index)
    {
        this.partList.add(index, part);
        String cid = part.getContentID();
        if( cid.length() > 0 )
        {
            this.partMap.put(cid, part);
        }
        part.setParent(this);
    }
    /**
     * 增加一个实体到当前
     * @param part MimePart
     */
    public void addMultipartEntry(MimePart part)
    {
        this.partList.add(part);
        String cid = part.getContentID();
        if( cid.length() > 0 )
        {
            this.partMap.put(cid, part);
        }
        part.setParent(this);
    }
    /**
     * 通过Index得到MultipartEntry
     * @param index int
     * @return MimePart
     */
    public MimePart getMultipartEntryByIndex(int index)
    {
        return (MimePart)this.partList.get(index);
    }
    /**
     * 通过Cid得到MultipartEntry
     * @param cid String
     * @return MimePart
     */
    public MimePart getMultipartEntryByCid(String cid)
    {
        return (MimePart)this.partMap.get(cid);
    }

    public MimeMultipartEntry[] getMultipartEntries()
    {
        MimeMultipartEntry entries[] = new MimeMultipartEntry[this.partList.size()];
        this.partList.toArray(entries);
        return entries;
    }

    public int getEntriesCount()
    {
        return  this.partList.size();
    }
    /**
     * setContent
     *
     * @param object Object
     * @param string String
     *
    public void setContent(String data, String contentType, String encoding)
        throws MessagingException
    {
        setContentType(contentType);
        setEncoding(encoding);
    }

    public void setContent(byte[] data, String contentType, String encoding)
    {
        setContentType(contentType);
        setEncoding(encoding);
        this.content = data;
    }*/


     /* setText
     *
     * @param string String
     * @throws MessagingException
     *
    public void setText(String string)
    {
        this.text = string;
    }*/

    /**
     * writeTo
     *
     * @param outputStream OutputStream
     * @throws IOException
     * @throws MessagingException
     * @todo Implement this javax.mail.Part method
     */
    public void writeTo(OutputStream out) throws IOException
    {
        //LineOutputStream lineWriter = new LineOutputStream(outputstream);
        //BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        //try
        //{
        if( this.getParent() != null )
        {
            out.write( ("--" + this.getParent().getBoundary()).getBytes() );
            out.write(0x0d);
            out.write(0x0a);
        }

        MimeMultipartEntry entries[] = this.getMultipartEntries();
        if( entries.length > 0 ) this.getBoundary();

        super.encodeHeaders(out);
        out.write(0x0d);
        out.write(0x0a);
        //lineWriter.writeln( this.toString() );
//System.out.println("MIMEI:"+this.mimei+" entries-length="+entries.length+"  content="+content.length);
        if( entries.length == 0 )
        {
            if( this.content == null )
            {
                throw new MimeException( "The content null." );
            }

            if( this.getContentType() == null )
            {
                throw new MimeException( "Content type unexist." );
            }

            String encoding = this.getEncoding();
            //System.out.println("GetEncoding:"+encoding);
            if( encoding == null )
            {
                out.write(content);
                out.write(0x0d);
                out.write(0x0a);

⌨️ 快捷键说明

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