如何使用.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;    
}

我无法控制我要下载的文件名,因为提交了文件。

当我URL编码文件时,我会得到"找不到文件"错误:

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

这是URL编码之后的路径:

c: program文件(x86) iis express http%3A%2f%2f%2flocalhost%3A1832%2FVIDEOUPLOADS%2F5L1XQE6FTEST %23.mp4'

在下载具有特殊字符或保留字符的文件时,如何解决不良请求错误?

在您的代码中什么时候实际提出了例外?WebClient应该没有问题下载任何有效命名的资源(如它在其上实际上是URL的作用)。如果您要使用的URL实际上是不是有效的URL(由于奇数文件名),则编码URL可能足以解决该问题。

但是,稍后您还将不良文件名用作File的参数,这可能是一个坏主意。如果这是提出异常的地方,只需构建自己的文件名而没有问题的字符,就应该足以解决问题。

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

最新更新