我有一个支持文件下载的Web应用程序。它适用于Firefox和Chrome。但是对于Internet Explorer,当我下载一个带有特殊字符的文件时,例如:#
,它总是将字符更改为下划线:_
。
例如,从Internet Explorer下载后,文件filename#.zip
将保存为filename_.zip
。
Web应用程序本身是使用GWT和Java编写的。 Web应用程序由Tomcat托管。我使用的IE版本是IE11。
我知道发布此问题有点模糊,因为我无法在此处发布我的整个Web应用程序代码。任何想法都是受欢迎的。
更新
这是我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.mycompany.somelistener</listener-class>
</listener>
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>webApp</web-resource-name>
<url-pattern>*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
</web-app>
答案 0 :(得分:0)
Windows禁止文件名中的多个字符(\ / : * ? " < > |
source),但#
应该没问题。
也许IE不喜欢它,因为它用于网络锚点(即url#anchor)。要了解发生了什么:
确保服务器实际发送您期望的文件名(查看网络上的HTTP响应标头;使用浏览器的开发工具或支持日志记录的本地代理服务器)
编辑你的代码,在文件名中放入各种奇怪的字符,看看哪些字符没问题,哪些不是
尝试使用其他浏览器;也许Windows会在浏览器尝试保存文件时重命名该文件。