我目前正在编写一个将文件上传到服务器的功能。
我的文件名格式很典型,例如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编码器。

10-07 19:34
查看更多