Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IE11将.xlsx文件转换为.xls,将.docx文件转换为.doc_Java_Ms Office_Internet Explorer 11 - Fatal编程技术网

Java IE11将.xlsx文件转换为.xls,将.docx文件转换为.doc

Java IE11将.xlsx文件转换为.xls,将.docx文件转换为.doc,java,ms-office,internet-explorer-11,Java,Ms Office,Internet Explorer 11,我有一个java应用程序,用户可以上传和下载文件。最近,我们发现只要用户点击IE11上的链接下载.docx或.xlsx文件,它就会下载.doc或.xls文件。在此过程中,它会警告用户文件格式和扩展名不匹配,用户仅应在信任文件源的情况下打开该文件。在Microsoft Edge或其他浏览器上不存在此类问题。 是否有一些设置可以在IE11中完成,或者可以进行一些编码(特定于IE11),以便它可以按原样下载.xlsx和.docx文件,并且不会向用户发出恼人的警告消息 try {

我有一个java应用程序,用户可以上传和下载文件。最近,我们发现只要用户点击IE11上的链接下载.docx或.xlsx文件,它就会下载.doc或.xls文件。在此过程中,它会警告用户文件格式和扩展名不匹配,用户仅应在信任文件源的情况下打开该文件。在Microsoft Edge或其他浏览器上不存在此类问题。 是否有一些设置可以在IE11中完成,或者可以进行一些编码(特定于IE11),以便它可以按原样下载.xlsx和.docx文件,并且不会向用户发出恼人的警告消息

            try {
            byte[] fileContent = getFileContent(id, fName);
            if (fileContent != null) {
                OutputStream out = null;
                try {
                    System.out.println("content type: "+getContentType(fName)); //prints application/vnd.ms-excel
                    res.reset();
                    out = res.getOutputStream();
                    res.setContentType(getContentType(fName));
                    res.setHeader("Content-Disposition", "inline; filename=" + fName + "; size=" + String.valueOf(fileContent.length));
                    res.setContentLength(fileContent.length);
                    out.write(fileContent);
                    setDestination(req, RESPONSE_NO_REDIRECT);
                } catch (Exception ex) {
                    ex.printStackTrace();
                } finally {
                    flushCloseOutputStream(out);
                }
            } else {
                setDestination(req, "/404.jsp");
            }
        } catch (Exception ex) {
           ex.printStackTrace();
        }
        
        
    public byte[] getFileContent(int id, String fileName) {
    byte[] bytes = null;
    Transaction tx = null;
    Session s = null;
    try {
        GenericDAO dao = HibernateDAOFactory.getInstance().getDAO(GenericClassDAO.class, Files.class);
        s = SessionAndTransactionManagementService.createNewSession(dao);
        tx = SessionAndTransactionManagementService.startNewTransaction(s);
        Criteria cr = s.createCriteria(Files.class)
                .add(Restrictions.eq("id", id))
                .add(Restrictions.eq("fileName", fileName))
                .setProjection(Projections.property("fileContent"));
        bytes = (byte[]) cr.uniqueResult();
        SessionAndTransactionManagementService.commitTransaction(s);
    } catch (Exception e) {
        HibernateUtil.rollback(tx);
        
    }finally{
        HibernateUtil.cleanupResources(s);
    }
    return bytes;
}

IE11将所有excel文件的内容类型设置为“application/vnd.ms excel”(不知道为什么)。这使得它可以显示警告并将xlsx文件作为xls下载


当文件名包含.xlsx时,我将代码更改为手动将contentType设置为“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”,这解决了我的问题。

IE浏览器本身不会将.docx转换为.doc。此外,没有从IE端修复此问题的设置。您需要调试代码以找到问题的原因。如果可能,然后尝试提供任何示例代码来检查问题。尽量提供有关该问题的详细信息。让我们知道,您安装的是哪个版本的MS Office,您使用的是哪个操作系统版本?@Deepak MSFT添加了下载文件的代码。我正在从数据库读取文件内容。下载文件时没有错误消息,因此无法调试。我想与您确认,IE 11浏览器是否可以在任何机器上产生此问题?或者它只能在特定的机器上生产?调用函数时是否传递了文件名的扩展名?我相信所有机器上都会发生这种情况。许多用户报告了此问题。调用函数时,文件名包含扩展名。我尝试检查您上面发布的代码,并尝试在我这边运行它。我发现许多方法都丢失了,我不确定您为参数传递了哪些值。由于这个原因,我无法运行代码。我还注意到您正在设置
res.setContentType(getContentType(fName))和文件名。我不知道你为什么在这里传递文件名。如果有任何简单的方法产生问题,那么请通知我。我将再次尝试检查该问题。