首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用.Net WebClient下载文件名包含特殊字符的文件

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

Stack Overflow用户
提问于 2015-05-08 15:49:25
回答 2查看 3.3K关注 0票数 0

在使用.Net WebClient下载文件名包含特定字符的文件时,我收到了一个错误“400-Bad请求”:

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

如果删除#签名,则文件将很好地下载:

这是我的代码:

代码语言:javascript
运行
复制
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编码时,我会得到一个“无法找到文件”错误:

代码语言:javascript
运行
复制
using (var client = new WebClient())
{
    filepath = Url.Encode(filepath);
    var buffer = client.DownloadData(filepath);
    return File(buffer, type.ToString(), path);
}

以下是URL编码后的路径:

C:\程序文件(x86)\IIS Express\http%3a%2f%2flocalhost%3a1832%2fVideoUploads%2f5L1XQE6FTest+%23.mp4‘

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

EN

回答 2

Stack Overflow用户

发布于 2015-05-08 15:59:09

在您的代码中什么时候会出现实际引发的异常?WebClient在下载任何有效命名的资源时应该没有问题(因为它实际上作为一个URL起作用)。如果您试图使用的URL实际上不是一个有效的URL (由于奇怪的文件名),则URL编码可能足以解决这个问题。

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

票数 1
EN

Stack Overflow用户

发布于 2018-11-09 16:18:15

请用%23替换#,它会工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30127929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档