[英]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.