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

http://www.cnblogs.com/luointer123/archive/2010/03/10/1682728.html

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

如类似以下的代码:

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

时间: 2024-08-30 18:33:50

上传或下载当文件名包含有特殊字符&quot;#&quot;的处理的相关文章

asp.net 上传或下载当文件名包含有特殊字符&amp;quot;#&amp;quot;的处理_实用技巧

如类似以下的代码: 复制代码 代码如下: Uri uri = new Uri(targetUrl);//targetUrl对应文件的绝对路径 System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "PUT"; request.Credentials = System.Net.CredentialCache.DefaultCredentials; reque

Linux使用SecureCRT上传和下载文件教程

  Linux使用SecureCRT上传和下载文件教程:         我们在日常工作中,经常会需要上传或者下载一些文件,Linux用户也不例外.那么在Linux系统中,有什么比较好用的上传下载工具呢?今天小编就教大家如何使用SecureCRT上传或下载文件. 具体操作步骤: 1.需要上传或者下载,需要使用rz和sz命令.如果linux上没有这两个命令工具,则需要先安装.可以使用yum安装.运行命令yum install lrzsz. 2.安装完成后就可以使用rz命令上传本地的文件到linux

wpf-WPF 项目中如何实现文件的上传和下载

问题描述 WPF 项目中如何实现文件的上传和下载 WPF 项目中如何实现文件的上传和下载功能,本人WPF初学者,求大神给一两个简单易懂的例子. 解决方案 参考WPF用流的方式上传/显示/下载图片文件(保存在数据库)WPF文件上传与下载功能 解决方案二: http://silverlightchina.net/html/study/WPF/2011/0512/7580.html http://www.th7.cn/Article/bc/wpf/201105/20110524082359.html

Java实现FTP文件的上传和下载功能的实例代码_java

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."下载"文件就是从远程主机拷贝文件至自己

PHP实现文件上传与下载实例与总结_php实例

一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添加enctype="multipart/form-data"属性,两者缺一不可(但是,优缺点并存,这里也限定了上传的方式和上传的文件之后的调用等方面,后面会说到) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transition

Linux文件上传工具下载工具及详细使用说明

对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令.今天,我们就简单的讲解一下如何安装和使用rz.sz命令. 经常使用linux的开发人员来说,肯定经常需要上传一些文件,或者下载linux的文件到本地查看,怎么能方便的操作的.而且又是高效率的呢. 第一种方式: 使用securecrt工具进行文件的上传,但是这个工具可能有点慢上传.上传下载如下图操作:    

解决WordPress的文件上传与下载问题

网上流传了一些修改WordPress文件上传大小限制的做法,大部分是一个版本,而且说得不够准确,特别是对于生手的指导性不强,本文总结了使用Wordpress博客的朋友在文件上传与下载时大小限制,及文件上传不成功之路的 一些问题总结与解决方法. 一.文件上传大小限制 最有效的办法:需要修改PHP配置来调整限制. 如为使上传大小限制为80M,将以下代码加入PHP配置: file_uploads =On upload_max_filesize =80M post_max_size =80M 针对不同的

linux基础命令(26) 用SecureCRT来上传和下载文件

用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的, SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传 输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的起 止时间.错误的判断与纠正等内容.常见的传输协议有以下几种: ASCII:这是最快的传输协议,但只能传送文本文件. Xmode

WSE3.0构建Web服务安全(4) MTOM消息传输优化和文件上传、下载

MTOM消息优化传输机制主要应用于大量数据的传输,很多文章中也直接得出结论:使用MTOM文件传输效率高.为什么MTOM的数据传输效率会比别的方式要高?MTOM真的如此完美吗,它有什么不足?什么情况下使用MTOM?这些疑问,本文WSE3.0构建Web服务安全系列文章的第4节:MTOM消息优化传输机制和文件上传.下载--将为您一一解答.本节结构为1.MTOM基础概念2.WSE3.0工具配置MTOM3.代码实现与分析4.总结.最后附上实现代码供大家参考. WSE3.0中引入MTOM机制,给我们借助WS