asp.Net
发布时间:2022-04-07 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net 上传或下载当文件名包含有特殊字符"#"的处理,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如类似以下的代码:
Uri uri = new Uri(targetUrl
);//targetUrl对应文件的绝对路径
Syste
m.Net.
httpWeb
request
request = (
httpWeb
request)Web
request.Create(uri
); request.Method = "PUT";
request.Credentials = Syste
m.Net.CredentialCache.DefaultCredentials;
request.ContentLength = strea
m.Length;
文件名为:fr#32%.xls (excel附件)
上传到服务器上,发现变成fr.xls了,文件名不对,所以就造成下载不了。
原因在于:一些 URI 包括段标识符或查询。段标识符是 URI 中跟
在数字符号 (#) 后的任何文本,存储在 Fragment 属性中。
查询信息是 URI 中跟在问号 (?) 后的任何文本,存储在 Query 属性中。也就是说,Uri类会对文件路径#号
后面的内容进行拆分存放。
而且,Uri中的相关属性也只读(ReadOnly)的,那么就
只能通过其它路径来修改了。
解决方法:
UriBuilder 类,为统一资源标识符 (URI) 提供自定义构造函数,并修改 Uri 类的 URI。跟Uri 的功能一样,但它的相关属性可以进行设置。
修改后的代码如下:
Uri uri = Web
Helper.ProcessSpecialCharacters(targetUrl
);//targetUrl对应文件的绝对路径
Syste
m.Net.
httpWeb
request
request = (
httpWeb
request)Web
request.Create(uri
); request.Method = "PUT";
request.Credentials = Syste
m.Net.CredentialCache.DefaultCredentials;
request.ContentLength = strea
m.Length;
/// <sum
Mary>
/// 当上传或下载的文件名包含有特殊字符"#"时,需要执行以下的函数进行处理
/// </sum
Mary>
/// <param name="Url"></param>
/// <returns></returns>
private static Uri ProcessSpecialCharacters(
String Url)
{ Uri uriTarget = new Uri(Url
); if (!Ur
l.Contains("#"))
{ return uriTarget;
}
UriBuilder msPage = new UriBuilder(
); @H_945_0
@msPage.Host = uriTarget.Host; @H_945_0
@msPage.
scheR_96_11845@e = uriTarget.
scheR_96_11845@e; @H_945_0
@msPage.Port = uriTarget.Port; @H_945_0
@msPage.Path = uriTarget.LocalPath + uriTarget.Fragment; @H_945_0
@msPage.Fragment = uriTarget.Fragment;
Uri uri = msPage.Uri;
return uri;
}
Uri uri = new Uri(targetUrl
);//targetUrl对应文件的绝对路径
大佬总结
以上是大佬教程为你收集整理的asp.net 上传或下载当文件名包含有特殊字符"#"的处理全部内容,希望文章能够帮你解决asp.net 上传或下载当文件名包含有特殊字符"#"的处理所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。