当前位置: 移动技术网 > IT编程>开发语言>.net > asp.net 上传或下载当文件名包含有特殊字符"#"的处理

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

今日京山论坛,爱情幼稚园,卞敬国

如类似以下的代码:
复制代码 代码如下:

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网