📄 mimemultipartentry.java
字号:
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 + -