2016-09-29 1 views
0

현재 서버에 파일을 업로드하는 기능을 작성 중입니다. 내 파일 이름 형식은 다음과 같습니다. ACTION # USERNAME.TXT, 오류가 발생했습니다.URLConnection.guessContentTypeFromName 오류 (Java)

java.lang.StringIndexOutOfBoundsException : length = 41; regionStart = 38; regionLength = -28 코드

writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE_FEED); 

이 라인에 좀 디버깅을했고, 문제가 문자 '#'로 인한 깨달았다

. 그것을 가져 오면 파일을 업로드 할 수 있습니다. 실제 파일은 # 문자를 허용하므로 # StringIndexOutOfBoundsException이 발생하는 이유를 실제로 이해하지 못합니다.

나에게 계몽 수 있습니까?

+0

나를 위해 일하십시오 : https://ideone.com/sEXYso 완전한 스택 트레이스를 제공 할 수 있습니까? –

+0

@RC. 작동하지 않습니다. 그것은'text/plain'을 반환하거나 OP가 기대하는 것입니다. '# '을'% 23'(으)로 변경하면 그것이 얻을 것이다. – Andreas

+0

@Andreas 예 [mcve] 승리를 위해 –

답변

2

# 부호는 URL에 특별한 의미가 있습니다.

URL 부분 (syntax 참조)은 클라이언트에서 서버로 전송되지 않습니다. 이는 클라이언트가 처리하는 URL의 일부입니다. 링크 및 리디렉션을 통해 서버에서 클라이언트로 보낼 수 있습니다.

# 부호 (또는 다른 특수 문자)를 파일 이름에 포함 시키려면 %NN 16 진 코드를 사용하여 이스케이프/인코딩해야합니다.

#의 인코딩은 %23이지만 실제로 URL 인코더를 사용해야합니다.

+0

간단하고 간결한 대답에 감사드립니다. URLEncoder.encode (fileName, "UTF-8"); 트릭을 했어. 감사! – user4094170