上传或下载当文件名包含有特殊字符"#"的处理
发布日期:2021-07-19 12:29:44 浏览次数:17 分类:技术文章

本文共 1514 字,大约阅读时间需要 5 分钟。

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

如类似以下的代码:
            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对应文件的绝对路径

转载地址:https://blog.csdn.net/jdsjlzx/article/details/9063941 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android 建议SQLite操作使用rawQuery方法
下一篇:Android 向多媒体数据库增加音频文件

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年10月05日 11时07分07秒