我无法使用 IE 下载电子邮件中的附件。没啥事儿。但我的代码在 Chrome 中工作。下面是下载代码:
public String downloadattach() {
InputStream attStream = null;
OutputStream oStream = null;
try {
String mailid = getRequest().getParameter("mailid");
String filename = getRequest().getParameter("filename");
MailboxServ serv = new MailboxServImpl();
CmMailbox mailbox = serv.getMailbox(mailid);
if (mailbox != null && mailbox.getCmessageBody() != null) {
Session session = Session.getInstance(System.getProperties(),
null);
InputStream iStream = mailbox.getCmessageBody()
.getBinaryStream();
MimeMessage message = new MimeMessage(session, iStream);
MailManage mm = new MailManage();
attStream = mm.getAttach(message, filename);
if (attStream != null) {
getResponse().setContentType("APPLICATION/OCTET-STREAM");//("APPLICATION/x-msdownload");
getResponse().setContentLength(attStream.available());
getResponse().setHeader("Content-Disposition",
"attachment; filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\"");
byte[] buff = new byte[2048];
oStream = getResponse().getOutputStream();
int count = 0;
while ((count = attStream.read(buff, 0, 1024)) > 0) {
oStream.write(buff, 0, count);
}
oStream.flush();
oStream.close();
attStream.close();
oStream = null;
}
} else {
writeMsg(false, "下载附件出错!邮件不存在或该邮件不包含指定附件!");
}
} catch (Exception e) {
// TODO: handle exception
logger.error(e.toString());
writeMsg(false, "下载附件出错!错误:" + e.getMessage());
} finally {
if (attStream != null) {
try {
attStream.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
if (oStream != null) {
try {
oStream.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
return null;
}
jsp中附件的链接是:
'<a href="downloadattachMail.action?mailid='+mailboxid+
'&filename='+fname+'" target="_blank">'+fname+'</a> '+fsize
它只是打开了一个带有链接的新窗口(例如:localhost:8081/CMAIL/downloadattachMail.action?mailid=40e4c0b6386e81e801386f0e67ce0018&filename=java-event中文.doc),但什么也不会发生。而“另存为”菜单也无法使用。有什么问题吗?谢谢!
下载可以在chrome、firefox和IE9下运行。但它不能在 IE8 中工作(也许不能在 IE7 和 IE6 中工作)。
我找到了原因。但这非常非常奇怪!为了解码汉字,我通过添加更改了tomcat的配置:
URIEncoding="UTF-8"
如果附件名称是英文,一切正常(chrome、ie8、ie9、firefox)。但是如果名字有汉字,用ie8的时候参数就乱了,而chrome、firefox和ie9都好。我改变了tomcat的配置:
URIEncoding="GBK"
ie8 效果很好,但是chrome,firefox 不行。
我找到了解决方案并分享给大家:
1)。将整个项目设置为 UTF-8,也将 jsp 设置为 utf-8。2)。在 Js 中,使用“encodeURI()”对 url 进行编码。3)。并使用 request.getParameter() 获取它。再次感谢您的好意!