asp.net 上傳或下載當文件名包含有特殊字符"#"的處理
更新時間:2010年03月10日 22:57:30 作者:
在上傳或下載文件時,當文件名包含有"#"特殊字符時,上傳以后的文件會被改名字,造成下載也下載不了。
如類似以下的代碼:
Uri uri = new Uri(targetUrl);//targetUrl對應(yīng)文件的絕對路徑
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附件)
上傳到服務(wù)器上,發(fā)現(xiàn)變成fr.xls了,文件名不對,所以就造成下載不了。
原因在于:一些 URI 包括段標識符或查詢。段標識符是 URI 中跟在數(shù)字符號 (#) 后的任何文本,存儲在 Fragment 屬性中。
查詢信息是 URI 中跟在問號 (?) 后的任何文本,存儲在 Query 屬性中。也就是說,Uri類會對文件路徑#號后面的內(nèi)容進行拆分存放。
而且,Uri中的相關(guān)屬性也只讀(ReadOnly)的,那么就只能通過其它路徑來修改了。
解決方法:
UriBuilder 類,為統(tǒng)一資源標識符 (URI) 提供自定義構(gòu)造函數(shù),并修改 Uri 類的 URI。跟Uri 的功能一樣,但它的相關(guān)屬性可以進行設(shè)置。
修改后的代碼如下:
Uri uri = WebHelper.ProcessSpecialCharacters(targetUrl);//targetUrl對應(yīng)文件的絕對路徑
System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "PUT";
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.ContentLength = stream.Length;
/// <summary>
/// 當上傳或下載的文件名包含有特殊字符"#"時,需要執(zhí)行以下的函數(shù)進行處理
/// </summary>
/// <param name="Url"></param>
/// <returns></returns>
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對應(yīng)文件的絕對路徑
復(fù)制代碼 代碼如下:
Uri uri = new Uri(targetUrl);//targetUrl對應(yīng)文件的絕對路徑
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附件)
上傳到服務(wù)器上,發(fā)現(xiàn)變成fr.xls了,文件名不對,所以就造成下載不了。
原因在于:一些 URI 包括段標識符或查詢。段標識符是 URI 中跟在數(shù)字符號 (#) 后的任何文本,存儲在 Fragment 屬性中。
查詢信息是 URI 中跟在問號 (?) 后的任何文本,存儲在 Query 屬性中。也就是說,Uri類會對文件路徑#號后面的內(nèi)容進行拆分存放。
而且,Uri中的相關(guān)屬性也只讀(ReadOnly)的,那么就只能通過其它路徑來修改了。
解決方法:
UriBuilder 類,為統(tǒng)一資源標識符 (URI) 提供自定義構(gòu)造函數(shù),并修改 Uri 類的 URI。跟Uri 的功能一樣,但它的相關(guān)屬性可以進行設(shè)置。
修改后的代碼如下:
復(fù)制代碼 代碼如下:
Uri uri = WebHelper.ProcessSpecialCharacters(targetUrl);//targetUrl對應(yīng)文件的絕對路徑
System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "PUT";
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.ContentLength = stream.Length;
/// <summary>
/// 當上傳或下載的文件名包含有特殊字符"#"時,需要執(zhí)行以下的函數(shù)進行處理
/// </summary>
/// <param name="Url"></param>
/// <returns></returns>
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對應(yīng)文件的絕對路徑
您可能感興趣的文章:
- ASP.NET Core文件上傳與下載實例(多種上傳方式)
- 擁有網(wǎng)頁版小U盤 ASP.NET實現(xiàn)文件上傳與下載功能
- asp.net+jquery.form實現(xiàn)圖片異步上傳的方法(附j(luò)query.form.js下載)
- Asp.net實現(xiàn)MVC處理文件的上傳下載功能實例教程
- asp.net 多文件上傳,兼容IE6/7/8,提供完整代碼下載
- asp.net 上傳下載輸出二進制流實現(xiàn)代碼
- asp.net Web Services上傳和下載文件(完整代碼)
- ASP.NET中文件上傳下載方法集合
- ASP.NET實現(xiàn)文件上傳功能
- ASP.NET Core實現(xiàn)文件上傳和下載
相關(guān)文章
asp.net音頻轉(zhuǎn)換之.amr轉(zhuǎn).mp3(利用ffmpeg轉(zhuǎn)換法)
AMR轉(zhuǎn)MP3可實現(xiàn)將手機上的AMR錄音轉(zhuǎn)換成流行的MP3格式,以適用更廣泛的應(yīng)用。AMR的體積非常小,適用于存儲在手機中,當我們想將在手機上的音頻上傳到網(wǎng)絡(luò),就需要將其轉(zhuǎn)換成MP3等流行的格式,本文就是介紹asp.net利用ffmpeg轉(zhuǎn)換法將.amr轉(zhuǎn).mp3的方法,下面來一起看看吧。2016-12-12
ASP.NET在IIS上注冊報0x800702e4錯誤解決方法
報一個0x800702e4 請求的操作需要提升的錯誤。解決的方法和前面大同小異,給這個aspnet_regiis.exe創(chuàng)建一個快捷方式,給它的目標后面加上 一個-i,再右擊這個快捷方式,以管理員身份運行,就行了2012-08-08
基于.Net?Core認證授權(quán)方案之JwtBearer認證
這篇文章介紹了基于.Net?Core認證授權(quán)方案之JwtBearer認證,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
asp.net GridView中使用RadioButton單選按鈕的方法
這篇文章主要介紹了asp.net GridView中使用RadioButton單選按鈕的方法,結(jié)合實例形式總結(jié)分析了三種GridView中使用RadioButton單選按鈕的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-07-07

