服务器之家

服务器之家 > 正文

asp.net 上传或下载当文件名包含有特殊字符"#"的处理

时间:2019-07-22 10:48     来源/作者:服务器之家

如类似以下的代码: 

复制代码代码如下:


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中的相关属性也只读(ReadOnly)的,那么就只能通过其它路径来修改了。 
解决方法: 
UriBuilder 类,为统一资源标识符 (URI) 提供自定义构造函数,并修改 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; 
/// <summary> 
/// 当上传或下载的文件名包含有特殊字符"#"时,需要执行以下的函数进行处理 
/// </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对应文件的绝对路径 

标签:

相关文章

热门资讯

抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
叠猫猫队长可以退出吗 叠猫猫队长怎么换队伍
叠猫猫队长可以退出吗 叠猫猫队长怎么换队伍 2019-06-05
淘宝合合卡可以送好友吗 淘宝合合卡快速获得方式
淘宝合合卡可以送好友吗 淘宝合合卡快速获得方式 2019-06-13
叠猫猫可以邀请多少人 叠猫猫大挑战一个队最多多少人
叠猫猫可以邀请多少人 叠猫猫大挑战一个队最多多少人 2019-06-05
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部