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

 更新时间:2010年03月10日 22:57:30   作者:  
在上传或下载文件时,当文件名包含有"#"特殊字符时,上传以后的文件会被改名字,造成下载也下载不了。
如类似以下的代码:
复制代码 代码如下:

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对应文件的绝对路径

相关文章

  • asp.net音频转换之.amr转.mp3(利用ffmpeg转换法)

    asp.net音频转换之.amr转.mp3(利用ffmpeg转换法)

    AMR转MP3可实现将手机上的AMR录音转换成流行的MP3格式,以适用更广泛的应用。AMR的体积非常小,适用于存储在手机中,当我们想将在手机上的音频上传到网络,就需要将其转换成MP3等流行的格式,本文就是介绍asp.net利用ffmpeg转换法将.amr转.mp3的方法,下面来一起看看吧。
    2016-12-12
  • ASP.NET在IIS上注册报0x800702e4错误解决方法

    ASP.NET在IIS上注册报0x800702e4错误解决方法

    报一个0x800702e4 请求的操作需要提升的错误。解决的方法和前面大同小异,给这个aspnet_regiis.exe创建一个快捷方式,给它的目标后面加上 一个-i,再右击这个快捷方式,以管理员身份运行,就行了
    2012-08-08
  • Visual Studio.Net 内幕(7)

    Visual Studio.Net 内幕(7)

    Visual Studio.Net 内幕(7)...
    2006-09-09
  • WPF图片按钮的实现方法

    WPF图片按钮的实现方法

    这篇文章主要为大家详细介绍了WPF图片按钮的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • .NET关于API 句柄泄漏分析

    .NET关于API 句柄泄漏分析

    本文主要介绍了.NET关于API 句柄泄漏分析,文中结合代码与图片讲解的非常详细,感兴趣的小伙伴可以自行参考一下
    2021-08-08
  • 为WPF框架Prism注册Nlog日志服务

    为WPF框架Prism注册Nlog日志服务

    这篇文章介绍了为WPF框架Prism注册Nlog日志服务的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • 基于.Net Core认证授权方案之JwtBearer认证

    基于.Net Core认证授权方案之JwtBearer认证

    这篇文章介绍了基于.Net Core认证授权方案之JwtBearer认证,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Asp.net中使用文本框的值动态生成控件的方法

    Asp.net中使用文本框的值动态生成控件的方法

    这篇文章主要介绍了Asp.net中使用文本框的值动态生成控件的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-05-05
  • asp.net GridView中使用RadioButton单选按钮的方法

    asp.net GridView中使用RadioButton单选按钮的方法

    这篇文章主要介绍了asp.net GridView中使用RadioButton单选按钮的方法,结合实例形式总结分析了三种GridView中使用RadioButton单选按钮的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07

最新评论