asp.net 업로드 또는 다운로드 파일 이름에 특수 문자 "#"처리가 포함된 경우

1971 단어
다음과 같은 코드가 있습니다.
 
  
Uri uri = new Uri(targetUrl);//targetUrl
System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "PUT";
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.ContentLength = stream.Length;

파일 이름: fr#32%.xls (excel 첨부 파일)
서버에 올렸는데 fr.xls가 됐어요. 파일 이름이 잘못돼서 다운로드가 안 돼요.
이유는 세그먼트 식별자나 질의를 포함하는 URI가 있기 때문입니다.세그먼트 식별자는 URI에서 숫자 기호(#) 뒤에 오는 텍스트이며 Fragment 속성에 저장됩니다.
질의 정보는 URI에서 물음표(?)이후의 모든 텍스트는Query 속성에 저장됩니다.즉, Uri 클래스는 파일 경로 # 번호 뒤에 있는 컨텐트를 분할하여 저장합니다.
그리고 Uri의 관련 속성도 읽기만 하면 다른 경로를 통해서만 수정할 수 있습니다.
해결 방법:
UriBuilder 클래스, URI(Unified Resource Ider)에 대한 사용자 정의 구조 함수를 제공하고 Uri 클래스의 URI를 수정합니다.Uri와 같은 기능이지만 관련 속성을 설정할 수 있습니다.
수정된 코드는 다음과 같습니다.
 
  
Uri uri = WebHelper.ProcessSpecialCharacters(targetUrl);//targetUrl
System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "PUT";
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.ContentLength = stream.Length;
///
/// "#" ,
///

///
///
private static Uri ProcessSpecialCharacters(string Url)
{
Uri uriTarget = new Uri(Url);
if (!Url.Contains("#"))
{
return uriTarget;
}
UriBuilder msPage = new UriBuilder();
msPage.Host = uriTarget.Host;
msPage.Scheme = uriTarget.Scheme;
msPage.Port = uriTarget.Port;
msPage.Path = uriTarget.LocalPath + uriTarget.Fragment;
msPage.Fragment = uriTarget.Fragment;
Uri uri = msPage.Uri;
return uri;
}
Uri uri = new Uri(targetUrl);//targetUrl

좋은 웹페이지 즐겨찾기