我目前正在编写一个将文件上传到服务器的功能。
我的文件名格式很典型,例如ACTION#USERNAME.TXT,我遇到了错误
java.lang.StringIndexOutOfBoundsException:length = 41; regionStart = 38; regionLength = -28
在这行代码上
writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE_FEED);
我进行了一些调试,发现问题是由字符“#”引起的。将其取出可以上传文件。实际文件允许使用#字符,因此我不太了解为什么#会导致StringIndexOutOfBoundsException。
有人能启发我吗?
最佳答案
URL中的#
符号具有特殊含义。
URL的#fragment
部分(请参见syntax)永远不会从客户端发送到服务器。它是客户端处理的URL的一部分。它可以通过链接和重定向从服务器发送到客户端。
要在文件名中包含#
符号(或任何其他特殊字符),必须使用%NN
十六进制代码对其进行转义/编码。#
的编码为%23
,但是您确实应该使用URL编码器。