0

我无法使用 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>&nbsp;&nbsp;'+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() 获取它。再次感谢您的好意!

4

1 回答 1

0

让我们问所有明显的问题......

您的 downloadattach() 方法是否被调用过?

如果是这样,它是否抛出任何异常或检测到任何其他错误?

如果您使用纯 ASCII 文件名,有什么不同吗?

于 2012-07-10T18:17:00.337 回答