想要强制下载资源而不是直接在Web浏览器中呈现资源的Web应用程序Content-Disposition在表单的HTTP响应中发出标头:
Content-Disposition: attachment; filename=FILENAME
该filename参数可用于建议浏览器下载资源的文件的名称.但是,RFC 2183(Content-Disposition)在2.3节(文件名参数)中指出文件名只能使用US-ASCII字符:
当前[RFC 2045]语法将参数值(以及因此内容处理文件名)限制为US-ASCII.我们认识到允许在文件名中使用任意字符集的巨大愿望,但是定义必要的机制超出了本文档的范围.
然而,有经验证据表明,当今大多数流行的Web浏览器似乎都允许非US-ASCII字符(缺乏标准)对编码方案和文件名的字符集规范不同意.问题是,如果文件名"naïvefile"(没有引号,第三个字母是U + 00EF)需要编码到Content-Disposition标题中,那么流行浏览器采用的各种方案和编码是什么?
出于这个问题的目的,流行的浏览器是:
我正在使用HttpClientPOST MultipartFormDataContent到Java Web应用程序.我正在上传几个StringContents和一个文件,我使用该方法添加为StreamContent使用.MultipartFormDataContent.Add(HttpContent content, String name, String fileName)HttpClient.PostAsync(String, HttpContent)
这工作正常,除非我提供包含德语变音符号的fileName(我还没有测试过其他非ASCII字符).在这种情况下,fileName正在进行base64编码.名为99 2 LD 353TempÄüöß-1.txt的文件的结果
看起来像这样:
__utf-8_B_VGVtcCDvv73vv73vv73vv71cOTkgMiBMRCAzNTMgVGVtcCDvv73vv73vv73vv70tMS50eHQ___
Run Code Online (Sandbox Code Playgroud)
Java服务器在其UI中显示此编码文件名,这会使用户感到困惑.我无法进行任何服务器端更改.
如何禁用此行为?任何帮助将受到高度赞赏.
提前致谢!