项目中有需要发送带附件的邮件。附件是excel。
我用poi的对象HSSFWorkbook生成了excel,但是它只有write方法,接收的参数是输出流(OutputStream抽象类)。
发邮件使用的是spring框架的MimeMessageHelper对象,接收的参数是输入流(inputStreamSource抽象类)。
我把OutputStream转换成InputStreamSource的做法是:
HSSFWorkbook wkb=new HSSFWorkbook(new FileInputStream(templateDir + "/caseBillArrivedReminder.xls"));
//省略部分赋值内容……
ByteArrayOutputStream arrayOutputStream = null;
OutputStream output = null;
try {
arrayOutputStream = new ByteArrayOutputStream();//创建一个ByteArray输出流
output=new BufferedOutputStream(arrayOutputStream);//用buffered包装一下
wkb.write(output);//把HSSFWorkbook内容写入ByteArray输出流中
output.flush();//清空缓冲区
InputStreamSource inputStreamSource = new ByteArrayResource(arrayOutputStream.toByteArray());//创建ByteArrayResource用ByteArray输出流的字节数组
//至此把OutputStream已经转换成了InputStreamSource
//省略其他……
} finally {
if(output!=null){
output.close();//关闭BufferedOutputStream输出流
}
if(arrayOutputStream!=null){
arrayOutputStream.close();//关闭ByteArray输出流
}
}