繁体   English   中英

如何使用.Net WebClient下载文件名包含特殊字符的文件

[英]How to download files with filename containing special characters using .Net WebClient

使用.Net WebClient下载文件名包含某些字符的文件时,出现错误“ 400 –错误的请求”:

例如,如果文件名为: 5L1XQE6FTest #.mp4 ; 这会产生一个错误。

如果删除#号,则文件下载正常:

这是我的代码:

public ActionResult DownloadVideoFile(string filepath)
{
    try
    {              
        filepath = "http://localhost:1832/VideoUploads/" + filepath;
        var type = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
        var path = Path.GetFileName(filepath);

        using (var client = new WebClient())
        {           
            var buffer = client.DownloadData(filepath);
            return File(buffer, type.ToString(), path);
        }
    }
    catch (Exception e)
    {
        var test = e.Message;
    }

    return null;    
}

由于文件是用户提交的,我无法控制要下载的文件名。

当我对文件进行网址编码时,出现“找不到文件”错误:

using (var client = new WebClient())
{
    filepath = Url.Encode(filepath);
    var buffer = client.DownloadData(filepath);
    return File(buffer, type.ToString(), path);
}

这是URL编码后的路径:

C:\\ Program Files(x86)\\ IIS Express \\ http%3a%2f%2flocalhost%3a1832%2fVideoUploads%2f5L1XQE6FTest +%23.mp4'

下载带有特殊字符或保留字符的文件时,如何解决“错误请求”错误?

在代码中什么时候实际引发了异常? WebClient可以毫无问题地下载任何有效命名的资源(有效,因为它实际上起着URL的作用)。 如果您尝试使用的URL实际上不是有效的URL(由于文件名是奇数),则对该URL进行编码可能足以解决问题。

但是,您稍后还会使用错误的文件名作为File的参数,这可能是一个坏主意。 如果这是引发异常的地方,那么只需构造自己的文件名而没有问题字符,就足以解决问题。

请用#23替换#,它将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM