asp.net 上传或下载当文件名包含有特殊字符"#"的处理
程序员文章站
2024-03-08 20:35:22
如类似以下的代码: 复制代码 代码如下: uri uri = new uri(targeturl);//targeturl对应文件的绝对路径 system.net.http...
如类似以下的代码:
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对应文件的绝对路径
复制代码 代码如下:
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对应文件的绝对路径
上一篇: Java并发之不可思议的死循环详解
下一篇: phpMyAdmin无法登陆的解决方法