asp.net 上传或下载当文件名包含有特殊字符"#"的处理
2010-03-10 00:00
851 查看
如类似以下的代码:
文件名为:fr#32%.xls (excel附件)
上传到服务器上,发现变成fr.xls了,文件名不对,所以就造成下载不了。
原因在于:一些 URI 包括段标识符或查询。段标识符是 URI 中跟在数字符号 (#) 后的任何文本,存储在 Fragment 属性中。
查询信息是 URI 中跟在问号 (?) 后的任何文本,存储在 Query 属性中。也就是说,Uri类会对文件路径#号后面的内容进行拆分存放。
而且,Uri中的相关属性也只读(ReadOnly)的,那么就只能通过其它路径来修改了。
解决方法:
UriBuilder 类,为统一资源标识符 (URI) 提供自定义构造函数,并修改 Uri 类的 URI。跟Uri 的功能一样,但它的相关属性可以进行设置。
修改后的代码如下:
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 上传或下载当文件名包含有特殊字符"#"的处理
- 上传或下载当文件名包含有特殊字符"#"的处理
- 上传或下载当文件名包含有特殊字符"#"的处理
- [求教] - 关于ASP中如何对数据表字段中所包含的特殊字符 ' 与 " 进行转义处理?
- Asp.net实现MVC处理文件的上传下载功能实例教程
- Asp.net MVC 处理文件的上传下载
- asp.net mvc使用validate.js验证 若name属性包含特殊字符则加上双引号即可
- ASP.NET实现下载功能的中文文件名乱码处理
- 文件上传 下载 一般处理程序和webForm联系以及asp.net内置对象
- Linux 下如何处理包含空格和特殊字符的文件名
- Ajax 以GET方式请求时,参数中包含 "#" 特殊字符的处理
- ASP.NET表单和一般处理程序处理文件上传和下载
- ASP.NET实现下载功能的中文文件名乱码处理
- Tip: Asp.net下载默认文件名里包含空格时,如何防止FireFox只截取空格前一部分作为文件名
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET MVC 实践之路 之十八 利用ASP.NET MVC处理文件上传与下载
- 针对“【ASP.NET】"密码最短长度为7,其中必须包含以下非字母数字字符1"解决方法
- ASP.NET实现下载的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理