java处理文件下载含特殊符号_上传或下载当文件名包含有特殊字符"#"的处理

在上传或下载文件时,当文件名包含有"#"特殊字符时,上传以后的文件会被改名字,造成下载也下载不了。

如类似以下的代码:

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;

///

/// 当上传或下载的文件名包含有特殊字符"#"时,需要执行以下的函数进行处理

///

///

///

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值