我在与其中在下载使用下划线替代所有空格的文件下载的问题。
基本上,我在这里得到了一个问题:
Response.AddHeader("Content-Disposition",
"attachment; filename=" + someFileName);
问题是,如果someFileName曾在它的空间,例如“检查这个out.txt”,那么用户将被提示下载“check_this_out.txt”。
我想最好的办法是进行urlencode文件名,所以我尝试
HttpUtility.UrlEncode(someFileName);
但是,它与加号,这难倒我更换的空间。 于是我刚试过
HttpUtility.UrlEncode(HttpUtility.UrlDecode("%20"))
和解码正常工作,并给了我一个空间,但编码占用空间,然后再次给我加号。
缺少什么我在这里,这是正确的? 如果是这样,我应该怎么正确编码空间为20%的,这正是我所需要的。
从引用此链接
我遇到这个自己。 如果你能够改变的空间,以20多岁的%IE7,然后将它们正确地转换。 火狐虽然将他们从字面上看(至少使用时的Content-disposition头),所以你需要从只有IE7要求做到这一点。
我们确实在我们的应用程序如下。 (一个Tomcat基于文档储存库)
String userAgent = request.getHeader("User-Agent"); if (userAgent.contains("MSIE 7.0")) { filename = filename.replace(" ", "%20"); } response.addHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
基本上都%20和+是编码的空间的有效方式。 显然,以UrlEncode方法有所回暖的选项之一 ...如果它选择做其他的方式,别人会问,为什么UrlEncode(UrlDecode("+"))
返回“%20” ...
你总是可以对其进行编码,然后只是做一个直串的“+”为“%20”代替。 我认为这工作...
我想最好的办法是进行urlencode文件名
这不是放出来的带外字符的头参数,如内容处置文件名以正确的方式,并且仅适用(有时)在IE中因错误。 其实这是一个有点长期存在的问题的: 没有正确的方式 。
如果您需要将特殊字符的文件名下载,你不能用内容配置文件名做可靠。 相反,忽略从内容处置,附件标题中的“文件名”参数,并留下你想要的文件名的URL的后一部分。 在没有文件名参数的浏览器会把它从URL路径,其中URL编码是解决特殊字符的正确途径。
您好我有下载他们在空间中的文件时,也面临着同样的问题。
请看看哪个最好的套房,并给出了完整的答案的链接。
http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download
为了便于理解,我只是添加ASP.net代码是如何来解决这个问题。
string document = @"C:\Documents and Settings\Gopal.Ampolu\My Documents\Downloads\" + "Disciplinary & Grievance Procedures..doc";
string filename = "Disciplinary & Grievance Procedures..doc";
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", @"attachment; filename=""" + HttpUtility.UrlDecode(filename) + @"""");
Response.Flush();
从上面可以看到,虽然增加头部的响应,文件名括用双引号。 请确保在“文件名”必须UrlDecode进行解码。
还有一个选项也有,如果你可以在以下亲密有关Windows修补程序更新现有的客户:
Windows修补程序更新IE的空白问题
这是客户端,因此可能并不适用于所有的情况,但仍然在可行的选项。
文章来源: Why does HttpUtility.UrlEncode(HttpUtility.UrlDecode(“%20”)) return + instead of %20?