Java IE11将.xlsx文件转换为.xls,将.docx文件转换为.doc
我有一个java应用程序,用户可以上传和下载文件。最近,我们发现只要用户点击IE11上的链接下载.docx或.xlsx文件,它就会下载.doc或.xls文件。在此过程中,它会警告用户文件格式和扩展名不匹配,用户仅应在信任文件源的情况下打开该文件。在Microsoft Edge或其他浏览器上不存在此类问题。 是否有一些设置可以在IE11中完成,或者可以进行一些编码(特定于IE11),以便它可以按原样下载.xlsx和.docx文件,并且不会向用户发出恼人的警告消息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 {
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))代码>和文件名。我不知道你为什么在这里传递文件名。如果有任何简单的方法产生问题,那么请通知我。我将再次尝试检查该问题。