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 に答える