javamail 读取较大附件
用的事james服务器,mysql数据库,上传小点的附件倒没有什么事,但是如果附件较大的话,读取邮件的速度会很慢,我的理解是因为邮件的内容和附件都存放在BLOB里面的,要获取附件的名称,就必须先获取BLOB里面的内容,在这里是getContent(),所以如果附件很大的话,就要将几M的内容从数据库中取出,再显示到前台,有没有更好的方法让读取较大的附件让速度变快
下面是我的部分代码,这里我只想去附件的名称,点击下载的时候才下载
Multipart mp = (Multipart) message.getContent();
List<String> attachName = new ArrayList<String>();// 用来存放附件名称,因为不知道附件有多少个
// 所以用list
List<Long> attachSize = new ArrayList<Long>();// 用来存放附件大小kb
for (int j = 0, m = mp.getCount(); j < m; j++) {
Part attachPart = mp.getBodyPart(j);
String disposition = attachPart.getDisposition();
if ((disposition != null)
&& ((disposition.equals(attachPart.ATTACHMENT)) || (disposition
.equals(attachPart.INLINE)))) {
long chunk = attachPart.getSize();// 获得附件的大小,不一定很准确。
attachSize.add(chunk);
String s = new String(attachPart.getFileName().getBytes(
"iso-8859-1"), "utf-8");
// MimeUtility.decodeText(attachPart.getFileName());
attachName.add(MimeUtility.decodeText(s));
}
}
// }
String[] an = new String[attachName.size()];
long[] size = new long[attachSize.size()];
for (int i = 0; i < an.length; i++) {
an[i] = attachName.get(i);
size[i] = attachSize.get(i);
}
eform.setAttachName(an);
eform.setFileSize(size);
if (an.length > 0)
eform.setContainAttach(true);