asp.net 업로드 또는 다운로드 파일 이름에 특수 문자 "#"처리가 포함된 경우
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.