asp.net 上傳或下載當(dāng)文件名包含有特殊字符"#"的處理
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 包括段標(biāo)識符或查詢。段標(biāo)識符是 URI 中跟在數(shù)字符號 (#) 后的任何文本,存儲在 Fragment 屬性中。
查詢信息是 URI 中跟在問號 (?) 后的任何文本,存儲在 Query 屬性中。也就是說,Uri類會對文件路徑#號后面的內(nèi)容進(jìn)行拆分存放。
而且,Uri中的相關(guān)屬性也只讀(ReadOnly)的,那么就只能通過其它路徑來修改了。
解決方法:
UriBuilder 類,為統(tǒng)一資源標(biāo)識符 (URI) 提供自定義構(gòu)造函數(shù),并修改 Uri 類的 URI。跟Uri 的功能一樣,但它的相關(guān)屬性可以進(jì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>
/// 當(dāng)上傳或下載的文件名包含有特殊字符"#"時,需要執(zhí)行以下的函數(shù)進(jìn)行處理
/// </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文件上傳與下載實(shí)例(多種上傳方式)
- 擁有網(wǎng)頁版小U盤 ASP.NET實(shí)現(xiàn)文件上傳與下載功能
- asp.net+jquery.form實(shí)現(xiàn)圖片異步上傳的方法(附j(luò)query.form.js下載)
- Asp.net實(shí)現(xiàn)MVC處理文件的上傳下載功能實(shí)例教程
- asp.net 多文件上傳,兼容IE6/7/8,提供完整代碼下載
- asp.net 上傳下載輸出二進(jìn)制流實(shí)現(xiàn)代碼
- asp.net Web Services上傳和下載文件(完整代碼)
- ASP.NET中文件上傳下載方法集合
- ASP.NET實(shí)現(xiàn)文件上傳功能
- ASP.NET Core實(shí)現(xiàn)文件上傳和下載
相關(guān)文章
在.Net?Framework應(yīng)用中請求HTTP2站點(diǎn)的問題解析
隨著各大瀏覽器支持和蘋果的帶頭效應(yīng),HTTP2的應(yīng)用會越來越廣泛,但是規(guī)模龐大的.NET?Framework應(yīng)用卻也不能為了連接HTTP2就升級到NET?Core平臺。通過本文提供的方案,可以最小成本的實(shí)現(xiàn).NET?Framework應(yīng)用成功訪問HTTP2站點(diǎn),感興趣的朋友跟隨小編一起看看吧2022-07-07自寫一個模仿Dictionary與Foreach的實(shí)現(xiàn)及心得總結(jié)
利用閑暇時間自己寫一個類模仿Dictionary實(shí)現(xiàn),如果一個類進(jìn)行foreach的話,該類必須實(shí)現(xiàn)IEnumerable,集合要支持foreach方式的遍歷,必須實(shí)現(xiàn)IEnumerable接口,感興趣的你可不要錯過了哈2013-02-02"PageMethods未定義"或"對象不支持此屬性或方法"解決方法分享
PageMethods未定義或?qū)ο蟛恢С执藢傩曰蚍椒ń鉀Q方法,需要的朋友可以參考下。2010-12-12ASP.NET MVC SSO單點(diǎn)登錄設(shè)計與實(shí)現(xiàn)代碼
本篇文章主要介紹了ASP.NET MVC SSO單點(diǎn)登錄設(shè)計與實(shí)現(xiàn),具有一定的參考價值,有興趣的可以了解一下。2017-01-01Asp.net的服務(wù)器推技術(shù) (Server Push)
在以往的和服務(wù)器端通信技術(shù)中,我們多數(shù)使用的是AJAX輪詢式訪問,也就是在Javascript中控制時間間隔,然后每隔一段時間就訪問一次服務(wù)器,然后獲得數(shù)據(jù)或通知。但是這種輪詢方式的訪問有90%是在做無用功。2010-01-01使用aspnet_regiis.exe重新注冊.NET Framework
本文主要介紹使用aspnet_regiis.exe重新注冊.NET Framework的方法,簡單實(shí)用,有需要的朋友拿去用吧。2016-05-05ASP.NET實(shí)現(xiàn)MVC中獲取當(dāng)前URL、controller及action的方法
這篇文章主要介紹了ASP.NET實(shí)現(xiàn)MVC中獲取當(dāng)前URL、controller及action的方法,結(jié)合實(shí)例形式分析了asp.net mvc獲取當(dāng)前URL、controller及action的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02.NET6?ConfigurationManager的實(shí)現(xiàn)及使用方式
這篇文章主要介紹了.NET6?ConfigurationManager的實(shí)現(xiàn),我們上面展示的這一部分的ConfigurationManager代碼,其實(shí)就是替代了原來的ConfigurationBuilder類的功能,需要的朋友可以參考下2021-12-12